您的位置:首页 > 理论基础 > 计算机网络

基于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 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数据报,另一端接受必须要接收两次,否者就会阻塞,楼主 的这个程序就是,如果你客户端输出消息,两次换行,服务端只会接受第一次发送的内容。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  网络编程