基于UDP协议的双端通信
2018-03-19 13:27
393 查看
UDP 协议是英文User Datagrem Protocol的缩写,用户数据报协议,是一个网络层传输协议,是一种面向非连接的协议,通信效率高,也就是说,它不对整个数据的完整性负责主要作用是完成网络数据流和数据报之间的交换。
这是楼主自己写的基于UDP协议的双端通信,两端互相发送和接受消息的小程序。public class UDPclient {
public final int byte_length = 4096 ;
byte[] buff = new byte[byte_length] ;
//创建接收的数据的数据报
DatagramPacket data = new DatagramPacket(buff, buff.length) ;
DatagramPacket in = null ;
public void init() {
try {
DatagramSocket server = new DatagramSocket(port) ;
while(true) {
server.receive(out);
System.out.println("服务端接受到的消息: "+new String(buff, 0 , out.getLength())+" 消息长度"+out.getLength());
System.out.println("请发送消息: ");
Scanner scr = new Scanner( System.in) ;
if(scr.hasNextLine()) {
byte[] dd = scr.nextLine().getBytes() ;
in = new DatagramPacket(dd,dd.length, out.getSocketAddress()) ;
server.send(in);
}
}
}catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
UDPserver uc = new UDPserver() ;
uc.init();
}
}其实基于UDP协议,没有服务端和客户单之分,一端发送,另一端接收,各管各的,实现,两端并不会建立连接,但是有一个问题就是,如果其中一段,发送两次次Datagram数据报,另一端接受必须要接收两次,否者就会阻塞,楼主 的这个程序就是,如果你客户端输出消息,两次换行,服务端只会接受第一次发送的内容。
这是楼主自己写的基于UDP协议的双端通信,两端互相发送和接受消息的小程序。public class UDPclient {
public final int byte_length = 4096 ;
byte[] buff = new byte[byte_length] ;
//创建接收的数据的数据报
DatagramPacket data = new DatagramPacket(buff, buff.length) ;
DatagramPacket out = null ; public void init() { try { DatagramSocket client = new DatagramSocket(); Scanner scr = new Scanner( System.in) ; while(scr.hasNextLine()) {
//获得从键盘输入的字符串 byte[] fd = scr.nextLine().getBytes() ;
//装载数据,并且指明要发送的主机和端口 out = new DatagramPacket(fd,fd.length,InetAddress.getByName("127.0.0.1"),30000) ; client.send(out); client.receive(data); System.out.println("客户端接受到的消息: "+new String(buff, 0 ,data.getLength()) + " 消息长度为"+data.getLength()); System.out.printf("请发送消息:"); } } catch (SocketException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { UDPclient uc = new UDPclient() ; uc.init(); } }
public class UDPserver { final int port = 30000 ; final int byte_length = 4096 ; byte[] buff = new byte[byte_length] ;//创建接受数据报的Datagream对象 DatagramPacket out = new DatagramPacket(buff, byte_length);
DatagramPacket in = null ;
public void init() {
try {
DatagramSocket server = new DatagramSocket(port) ;
while(true) {
server.receive(out);
System.out.println("服务端接受到的消息: "+new String(buff, 0 , out.getLength())+" 消息长度"+out.getLength());
System.out.println("请发送消息: ");
Scanner scr = new Scanner( System.in) ;
if(scr.hasNextLine()) {
byte[] dd = scr.nextLine().getBytes() ;
in = new DatagramPacket(dd,dd.length, out.getSocketAddress()) ;
server.send(in);
}
}
}catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
UDPserver uc = new UDPserver() ;
uc.init();
}
}其实基于UDP协议,没有服务端和客户单之分,一端发送,另一端接收,各管各的,实现,两端并不会建立连接,但是有一个问题就是,如果其中一段,发送两次次Datagram数据报,另一端接受必须要接收两次,否者就会阻塞,楼主 的这个程序就是,如果你客户端输出消息,两次换行,服务端只会接受第一次发送的内容。
相关文章推荐
- 基于QT的UDP协议的通信小程序
- 基于QT的UDP协议的通信
- Java学习系列(十八)Java面向对象之基于UDP协议的网络通信
- Java学习系列(十八)Java面向对象之基于UDP协议的网络通信
- C语言编写基于TCP和UDP协议的Socket通信程序示例
- java基于UDP协议的通信
- 136-基于 UDP 协议的通信
- 基于UDP协议下的客户端与服务器之间的通信
- C语言编写基于TCP和UDP协议的Socket通信程序示例
- Linux中使用C语言实现基于UDP协议的Socket通信示例
- 基于Tcp&UDP协议的简单Socket通信实例(JAVA)
- JAVA基础知识之网络编程——-基于UDP协议的通信例子
- 基于udp通信协议开发的简易聊天系统1.0
- android手机与服务器基于UDP协议的通信
- 基于UDP协议的P2P模式即时通信软件1.0
- 使用C#实现基于TCP和UDP协议的网络通信程序的基本示例
- socket编程 -- 基于UDP协议的C/S通信模型及实现
- Java学习系列(十八)Java面向对象之基于UDP协议的网络通信
- 基于QT的UDP协议的通信小程序
- vs2015基于UDP协议的简单通信例程