【Java】—网络编程:基于UDP协议的网络通信
文章目录
- 【Java】---网络编程:基于UDP协议的网络通信
- 一、UDP协议
-
- 1.1 概念
- 二、基于UDP协议的Socket编程
-
- 2.1 基于UDP协议的单向通信
-
- 2.1.1 接收方
- 2.1.2 发送方
- 2.2 基于UDP协议的聊天室
-
- 2.2.1 接收方
- 2.2.2 发送方
- 总结
一、UDP协议
1.1 概念
UDP协议(User Datagram Protocol),即用户数据报协议,是一种
UDP协议的传输效率比TCP协议高,适合广播发送。
使用UDP协议的通信双方分别为
二、基于UDP协议的Socket编程
2.1 基于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协议实现的通信和聊天室。