Java—网络编程:基于UDP协议的网络通信

【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),即用户数据报协议,是一种无连接的,不可靠的,基于数据报的传输层通信协议。每个数据报的大小为65KB
UDP协议的传输效率比TCP协议高,适合广播发送
使用UDP协议的通信双方分别为接收方发送方,两者地位相等。


二、基于UDP协议的Socket编程

2.1 基于UDP协议的单向通信

DatagramSocket(数据报套接字)是Java中用于实现基于UDP协议的网络编程的套接字类。
可以用于在网络上发送和接收UDP数据。

2.1.1 接收方

  1. 创建DatagramSocket对象,并指定本机的端口号。
DatagramSocket ds = new DatagramSocket(6666);
  1. 创建接收数据报包。
byte[] buf = new bytep[1024 * 64];//65KB
DatagramPacket dp = new DatagramPacket(buf,buf.length);//指定接收的数组和其长度
  1. 接收数据。
System.out.println("准备接收...");
ds.receive(dp);//reveive是阻塞方法,除非接收到数据,否则不会执行
  1. 处理数据。
String data = new String(dp.getData(),0,dp.getLength());
System.out.println("接收到数据:" + data);
  1. 关闭。
ds.close();

2.1.2 发送方

  1. 创建DatagramSocket对象,不指定端口号,即随即绑定一个端口号。
DatagramSocket ds = new DatagramSocket();
  1. 创建发送数据报包
String s = "你好啊";
DatagramPacket dp = new DatagramPacket(s.getBytes(),//发送的数据
									   s.getBytes().length,//数据长度
									   InetAddress.getByName("10.9.48.155"),//对方的IP地址
									   6666);//对方端口号

  1. 发送数据
ds.send(dp);
  1. 关闭
ds.close();

2.2 基于UDP协议的聊天室

2.2.1 接收方

  1. 创建DatagramSocket对象,并指定端口号。
DatagramSocket ds = new DatagramSocket(8888);
  1. 创建接收数据报包。
byte[] b = new byte[1024 * 64];
DatagramPacket dp = new DatagramPacket(b,b.length);//规定数据报包的大小
  1. 接收数据并处理
while(true){
	ds.receive(dp);
	String data = new String(dp.getData());
	System.out.println(dp.getAddress() + "说:" + data);
}

2.2.2 发送方

  1. 创建DatgramSocket对象,不指定端口号,即随机绑定一个端口号。创建Scanner对象
DatagramSocket ds = new DatagramSocket();
Scanner input = new Scanner(System.in);
  1. 循环输入数据,创建发送数据报包,直到输入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;
}
  1. 关闭
ds.close();

总结

今天的文章讲解了UDP协议,以及基于UDP协议实现的通信和聊天室。