首页 > 编程笔记 > Java笔记 阅读:23

Java实现UDP通信(附带实例)

TCP 通信是一种基于连接的通信,也就是说在传输数据前必须先建立连接,所以它的操作比较复杂,比如涉及输入流输出流。然而对于有些场景在不要求可靠性的情况下可以使用 UDP 通信,它不必建立连接,大大简化了通信流程。

DatagramSocket 类实现了 UDP 套接字功能,该类位于 java.net 包中。该类包含了下面三种构造方法:
DatagramSocket()
DatagramSocket(int port)
DatagramSocket(int port, InetAddress laddr)

对于 UDP 编程,虽然也有分服务器端和客户端,但是两端都使用 DatagramSocket 类,这点与 TCP 编程不同。UDP 的服务器端代码如下所示:
public class UDPSocketServer {
    public static void main(String[] args) {
        try {
              DatagramSocket ds = new DatagramSocket(8888);
              byte[] buf = new byte[5];
              DatagramPacket dp = new DatagramPacket(buf, buf.length);
              System.out.println("开始等待接收数据");
              ds.receive(dp);
              System.out.println("接收到数据:" + new String(buf));
              ds.close();
        } catch (Exception e) {
              e.printStackTrace();
        }
    }
}
首先创建 DatagramSocket 对象并绑定本地 端口,然后创建 DatagramPacket 对象并调用 receive() 方法阻塞等待接收数据,一旦有客户端发送数据过来它就会接收数据并往下执行。

客户端的代码如下所示:
public class UDPSocketClient {
    public static void main(String[] args) {
         try {
               DatagramSocket ds = new DatagramSocket();
               InetAddress ip = InetAddress.getByName("localhost");
               ds.connect(ip, 8888);
               byte[] data = "hello".getBytes();
               DatagramPacket dp = new DatagramPacket(data, data.length);
               System.out.println("发送数据");
               ds.send(dp);
               ds.close();
         } catch (Exception e) {
               e.printStackTrace();
         }
    }
}
首先创建 DatagramSocket 对象,然后调用 connect() 方法连接指定的服务器端,接着创建 DatagramPacket 对象并将数据放入后调用 send() 方法即可完成发送。

服务器端的输出结果:

开始等待接收数据
接收到数据:hello


客户端的输出结果:

开始发送数据

相关文章