UDP通信
特点:无连接、不可靠通信。 不事先建立连接;发送端每次把要发送的数据(限制在 64KB 内)、接收端 IP 、等信息封装成一个数据包,发出去就不管了。 Java 提供了一个 java.net . DatagramSocket 类 来 实现 UDP 通信 。DatagramSocket: 用于创建客户端、服务端
构造器 | 说明 |
public DatagramSocket() | 创建客户端的Socket对象, 系统会随机分配一个端口号。 |
public DatagramSocket(int port) | 创建服务端的Socket对象, 并指定端口号 |
方法 | 说明 |
public void send(DatagramPacket dp) | 发送数据包 |
public void receive(DatagramPacket p) | 使用数据包接收数据 |
//创建客户端的Socket对象, 系统会随机分配一个端口号。
DatagramSocket socket = new DatagramSocket();
DatagramPacket:创建数据包
构造器 | 说明 |
public DatagramPacket(byte[] buf, int length, InetAddress address, int port) | 创建发出去的数据包对象 |
public DatagramPacket(byte[] buf, int length) | 创建用来接收数据的数据包 |
方法 | 说明 |
public int getLength() | 获取数据包,实际接收到的字节个数 |
//创建发出去的数据包对象
Scanner sc = new Scanner(System.in);
while(true){
System.out.println("msg :");
String msg = sc.nextLine();
if("exit".equals(msg)){
System.out.println("退出成功!");
//释放资源
socket.close();
break;
}
byte[] bytes = msg.getBytes();
DatagramPacket packet = new DatagramPacket(bytes, bytes.length,
InetAddress.getLocalHost(), 6000);
//发送数据包
socket.send(packet);
}
//创建服务端的Socket对象, 并指定端口号
DatagramSocket socket = new DatagramSocket(6000);
//创建用来接收数据的数据包
byte[] buffer = new byte[1024 * 64];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length));
while(true){
//使用数据包接收数据
socket.receive(packet);
//获取数据包,实际接收到的字节个数
int len = packet.getLength();
String rs = new String(buffer, 0, len);
System.out.println(rs);
packet.getAddress().getHostAddress();
packet.getPort();
}
UDP的接收端可以接收很多发送端的消息的原因:接收端只负责接收数据包,无所谓是哪个发送端的数据包。
标签:DatagramSocket,UDP,DatagramPacket,通信,packet,new,数据包,public From: https://blog.csdn.net/2301_81718046/article/details/139408645