Java UDP通信簡單實現


1、Java實現方式
1)server端

/**
 * UDPserver端
 * */
public class UdpServer {
    // 定義一些常量
    private final intMAX_LENGTH = 1024; // 最大接收字節長度
    private final intPORT_NUM   = 5066;   // port號
    // 用以存放接收數據的字節數組
    private byte[] receMsgs = new byte[MAX_LENGTH];
    // 數據報套接字
    private DatagramSocket datagramSocket;
    // 用以接收數據報
    private DatagramPacket datagramPacket;
   
    public UdpServer(){
        try {
            /******* 接收數據流程**/
            // 創建一個數據報套接字,並將其綁定到指定port上
            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)client

/***
 * UDPclientClient端
 ***/
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();
            }
        }
    }  
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM