Java UDP通信简单实现

Posted 流云易采

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java UDP通信简单实现相关的知识,希望对你有一定的参考价值。

1、Java实现方式 1)服务器端

/**
 * UDP服务器端
 * */
public class UdpServer 
    // 定义一些常量
    private final intMAX_LENGTH = 1024; // 最大接收字节长度
    private final intPORT_NUM   = 5066;   // 端口号
    // 用以存放接收数据的字节数组
    private byte[] receMsgs = new byte[MAX_LENGTH];
    // 数据报套接字
    private DatagramSocket datagramSocket;
    // 用以接收数据报
    private DatagramPacket datagramPacket;
   
    public UdpServer()
        try 
            /******* 接收数据流程**/
            // 创建一个数据报套接字,并将其绑定到指定端口上
            datagramSocket = new DatagramSocket(PORT_NUM);
            // DatagramPacket(byte buf[], int length),建立一个字节数组来接收UDP包
            datagramPacket = new DatagramPacket(receMsgs, receMsgs.length);
            // receive()来等待接收UDP数据报
            datagramSocket.receive(datagramPacket);
           
            /****** 解析数据报****/
            String receStr = new String(datagramPacket.getData(), 0 , datagramPacket.getLength());
            System.out.println("Server Rece:" + receStr);
            System.out.println("Server Port:" + datagramPacket.getPort());
           
            /***** 返回ACK消息数据报*/
            // 组装数据报
            byte[] buf = "I receive the message".getBytes();
            DatagramPacket sendPacket = new DatagramPacket(buf, buf.length, datagramPacket.getAddress(), datagramPacket.getPort());
            // 发送消息
            datagramSocket.send(sendPacket);
         catch (SocketException e) 
            e.printStackTrace();
         catch (IOException e) 
            e.printStackTrace();
         finally 
            // 关闭socket
            if (datagramSocket != null) 
                datagramSocket.close();
            
        
    

2)客户端

/***
 * UDP客户端Client端
 ***/
public class UdpClient 
   
    private String sendStr = "SendString";
    private String netAddress = "127.0.0.1";
    private final intPORT_NUM = 5066;
   
    private DatagramSocket datagramSocket;
    private DatagramPacket datagramPacket;
   
    public UdpClient()
        try 
           
            /*** 发送数据***/
            // 初始化datagramSocket,注意与前面Server端实现的区别
            datagramSocket = new DatagramSocket();
            // 使用DatagramPacket(byte buf[], int length, InetAddress address, int port)函数组装发送UDP数据报
            byte[] buf = sendStr.getBytes();
            InetAddress address = InetAddress.getByName(netAddress);
            datagramPacket = new DatagramPacket(buf, buf.length, address, PORT_NUM);
            // 发送数据
            datagramSocket.send(datagramPacket);
           
            /*** 接收数据***/
            byte[] receBuf = new byte[1024];
            DatagramPacket recePacket = new DatagramPacket(receBuf, receBuf.length);
            datagramSocket.receive(recePacket);
           
            String receStr = new String(recePacket.getData(), 0 , recePacket.getLength());
            System.out.println("Client Rece Ack:" + receStr);
            System.out.println(recePacket.getPort());
           
           
         catch (SocketException e) 
            e.printStackTrace();
         catch (UnknownHostException e) 
            e.printStackTrace();
         catch (IOException e) 
            e.printStackTrace();
         finally 
            // 关闭socket
            if(datagramSocket != null)
                datagramSocket.close();
            
        
      

以上是关于Java UDP通信简单实现的主要内容,如果未能解决你的问题,请参考以下文章

Java UDP通信简单实现

java实现UDP通信

TCP和UDP通信有啥区别 如何分别用java实现?

UDP协议----简单的CS模型实现

170411java Socket通信的简单例子(UDP)

Java系列讲座二:Socket网络通信实现聊天软件项目讲解(UDP)