1. 程式人生 > >網路通訊--協議--udp

網路通訊--協議--udp

網路通訊--協議--udp

UDP demo(java)

  • 環境 1.8
  • 客戶端和服務端不要放到一個執行緒中去啟動!
//udp 服務端
public class UdpServer{
    public static void server(){
        try {
            InetAddress address = InetAddress.getLocalHost();//這個ip 地址,就是cmd使用ipconfig命令中ipv4地址
            int port = 8080;

            //建立DatagramSocket物件 socket物件
            DatagramSocket socket = new DatagramSocket(port, address);

            byte[] buf = new byte[1024];  //定義byte陣列
            DatagramPacket packet = new DatagramPacket(buf, buf.length);  //建立DatagramPacket物件
            System.out.println("服務端啟動:" +address.getHostAddress()+":"+ port);
            socket.receive(packet);  //通過套接字接收資料
            System.out.println("服務端接收完成:");
            String getMsg = new String(buf, 0, packet.getLength());
            System.out.println("客戶端傳送的資料為:" + getMsg);

            //從伺服器返回給客戶端資料
            InetAddress clientAddress = packet.getAddress(); //獲得客戶端的IP地址
            int clientPort = packet.getPort(); //獲得客戶端的埠號
            SocketAddress sendAddress = packet.getSocketAddress();
            String feedback = "Received";
            byte[] backbuf = feedback.getBytes();
            DatagramPacket sendPacket = new DatagramPacket(backbuf, backbuf.length, sendAddress); //封裝返回給客戶端的資料
            socket.send(sendPacket);  //通過套接字反饋伺服器資料

            socket.close();  //關閉套接字

        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch(IOException e) {
            e.printStackTrace();
        }

    }
}
//客戶端
public class UdpClent{
    public static void send(){
        String serverPosrt = "127.0.0.1";//這個ip 地址,就是cmd使用ipconfig命令中ipv4地址
        String msg = "Hello, World";
        byte[] buf = msg.getBytes();
        try {
            InetAddress address = InetAddress.getByName("");  //伺服器地址
            int port = 8080;  //伺服器的埠號
            //建立傳送方的資料報資訊
            DatagramPacket dataGramPacket = new DatagramPacket(buf, buf.length, address, port);

            DatagramSocket socket = new DatagramSocket();  //建立套接字
            socket.send(dataGramPacket);  //通過套接字傳送資料

            //接收伺服器反饋資料
            byte[] backbuf = new byte[1024];
            DatagramPacket backPacket = new DatagramPacket(backbuf, backbuf.length);
            socket.receive(backPacket);  //接收返回資料
            String backMsg = new String(backbuf, 0, backPacket.getLength());
            System.out.println("伺服器返回的資料為:" + backMsg);

            socket.close();

        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
//啟動服務端
public static void main(String[] args) {
       UdpServer.server();
    }
    //啟動客戶端請求
public static void main(String[] args) {
        UdpClent.send();
    }