Java UDPServer 简单实现

268 阅读1分钟

在四层通信编程实现中,大部分情况下,我们都会使用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();
    }
}