UDP协议(User Datagram Protocol),即用户数据报协议,是一种无连接
的,不可靠
的,基于数据报
的传输层通信协议。每个数据报的大小为65KB
。
UDP协议的传输效率比TCP协议高,适合广播发送。
使用UDP协议的通信双方分别为接收方
和发送方
,两者地位相等。
DatagramSocket
(数据报套接字)是Java中用于实现基于UDP协议的网络编程的套接字类。
可以用于在网络上发送和接收UDP数据。
DatagramSocket ds = new DatagramSocket(6666);
byte[] buf = new bytep[1024 * 64];//65KB
DatagramPacket dp = new DatagramPacket(buf,buf.length);//指定接收的数组和其长度
System.out.println("准备接收...");
ds.receive(dp);//reveive是阻塞方法,除非接收到数据,否则不会执行
String data = new String(dp.getData(),0,dp.getLength());
System.out.println("接收到数据:" + data);
ds.close();
DatagramSocket ds = new DatagramSocket();
String s = "你好啊";
DatagramPacket dp = new DatagramPacket(s.getBytes(),//发送的数据
s.getBytes().length,//数据长度
InetAddress.getByName("10.9.48.155"),//对方的IP地址
6666);//对方端口号
ds.send(dp);
ds.close();
DatagramSocket ds = new DatagramSocket(8888);
byte[] b = new byte[1024 * 64];
DatagramPacket dp = new DatagramPacket(b,b.length);//规定数据报包的大小
while(true){
ds.receive(dp);
String data = new String(dp.getData());
System.out.println(dp.getAddress() + "说:" + data);
}
DatagramSocket ds = new DatagramSocket();
Scanner input = new Scanner(System.in);
while(true){
String data = input.next();
DatagramPacket dp = new DatagramPacket(data.getBytes(),//数据
data.getBytes().length,//数据长度
InetAddress.getByName("10.9.48.255"),//广播地址,所有人可见
8888);//同一端口号
ds.send(dp);//发送数据报包
if(data == "over")
break;
}
ds.close();
今天的文章讲解了UDP协议,以及基于UDP协议实现的通信和聊天室。