【Java】—网络编程:基于UDP协议的网络通信
文章目录
一、UDP协议
1.1 概念
UDP协议(User Datagram Protocol),即用户数据报协议,是一种无连接
的,不可靠
的,基于数据报
的传输层通信协议。每个数据报的大小为65KB
。
UDP协议的传输效率比TCP协议高,适合广播发送。
使用UDP协议的通信双方分别为接收方
和发送方
,两者地位相等。
二、基于UDP协议的Socket编程
2.1 基于UDP协议的单向通信
DatagramSocket
(数据报套接字)是Java中用于实现基于UDP协议的网络编程的套接字类。
可以用于在网络上发送和接收UDP数据。
2.1.1 接收方
- 创建DatagramSocket对象,并指定本机的端口号。
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();
2.1.2 发送方
- 创建DatagramSocket对象,不指定端口号,即随即绑定一个端口号。
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();
2.2 基于UDP协议的聊天室
2.2.1 接收方
- 创建DatagramSocket对象,并指定端口号。
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);
}
2.2.2 发送方
- 创建DatgramSocket对象,不指定端口号,即随机绑定一个端口号。创建Scanner对象
DatagramSocket ds = new DatagramSocket();
Scanner input = new Scanner(System.in);
- 循环输入数据,创建发送数据报包,直到输入over才结束
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协议实现的通信和聊天室。