天天看點

Java----網絡程式設計-----UDP程式設計

UDP:不是面向連接配接的協定,它是以資料為中興的協定,它的特點:資料的可靠性較差,資料容易丢失,但是它的效率高

一、類DatagramSocket DatagramPacket

用戶端

   1、建立用戶端使用 DatagramSocket 類 + 端口 (指定:我的資料從那個端口出去).

   2、準備資料 隻不過這些資料需要裝配到位元組數組中去.

   3、将資料打包使用 DatagramPacket + 伺服器位址及端口号 來完成打包.

   4、發送.

   5、釋放資源.

伺服器端

   1、建立伺服器端使用 DatagramSocket 類 + 端口 (指定:我從那個端口獲得資料).

   2、準備接收資料 同樣需要定義一個位元組數組 封裝 DataGramPacket .

   3、接收資料.

   4、分析資料.

   5、釋放資源.

例:模拟

         public static void main(String[] args) {
        //建立用戶端使用 DatagramSocket 類 + 端口 (指定:我的資料從那個端口出去)
           DatagramSocket client = null;
           DatagramPacket packet = null;
           // 準備數組.
           byte[] data = null;
           try {
            client = new DatagramSocket(8888);
            //準備資料 隻不過這些資料需要裝配到位元組數組中去.
            String msg = "XXXXXXXXXXX";
            data = msg.getBytes();
            //将資料打包使用 DatagramPacket + 伺服器位址及端口号 來完成打包.
            packet = new DatagramPacket(data, data.length,new InetSocketAddress("127.0.0.1",8888));
            //發送
            client.send(packet);
            //釋放資源.
            client.close();            
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }        
    }    
}
           
public static void main(String[] args) {
        // TODO Auto-generated method stub

        //建立伺服器端使用 DatagramSocket 類 + 端口 (指定:我從那個端口獲得資料).
        DatagramSocket server = null;
        DatagramPacket packet = null;
        try {
            server = new DatagramSocket(8888);
            //準備接收資料 同樣需要定義一個位元組數組 封裝 DataGramPacket .
            byte[] data = new byte[1024];
            packet = new DatagramPacket(data, data.length);
            //接收資料.
            server.receive(packet);//阻塞方法
            //分析資料.
            
            byte[] data01 = packet.getData(); // 獲得用戶端傳輸的真實資料 
            System.out.println(new String(data));
            //釋放資源.
            server.close();
            
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }        
    }
}