在四层通信编程实现中,大部分情况下,我们都会使用TCP实现 server/client,也有特定场景下考虑性能等用到 UDP 实现,今天学习下 Java 中通过 UDP 实现简单的 server/client。
在 UDP 实现中:
- server 的创建我们会用到 DatagramSocket 来创建服务,通过 DatagramPacket 来封装数据包
- client的实现也类似,但不一样的是 DatagramSocket 创建客户端时,构造对象时一般不指定端口。
Server
package org.example;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class SimpleUDPServer {
public static void main(String[] args) throws Exception {
System.out.println("---UDP server is up---");
// 1.创建接收端,绑定端口
DatagramSocket server = new DatagramSocket(8888);
// 2.准备容器,通过DatagramPacket封装数据
byte[] container = new byte[1024 * 16];
DatagramPacket packet = new DatagramPacket(container, 0, container.length);
// 3.阻塞等待连接
server.receive(packet);
// 4.处理数据
byte[] datas = packet.getData();
int len = packet.getLength();
String content = new String(datas, 0, len);
System.out.println(content);
// 5.释放资源
server.close();
}
}
Client
package org.example;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
public class SimpleUDPClient {
public static void main(String[] args) throws Exception {
System.out.println("---UDP client is up to send msg---");
// 1.指定端口,创建发送端
DatagramSocket client = new DatagramSocket(9999);
// 2.准备数据
String data = "来自于client的数据: " + client.getLocalSocketAddress().toString();
byte[] datas = data.getBytes();
// 3.封装数据
DatagramPacket packet = new DatagramPacket(datas, datas.length, new InetSocketAddress("localhost", 8888));
// 4.发送数据
client.send(packet);
// 5.释放资源
client.close();
}
}