天天看點

UDP協定發包的使用(DatagramSocket、DatagramPacket)

1、UDP 是User Datagram Protocol的簡稱, 中文名是使用者資料報協定,是 OSI (Open System Interconnection, 開放式系統互聯 ) 參考模型中一種無連接配接的 傳輸層

協定,提供面向事務的簡單不可靠資訊傳送服務,IETF RFC 768是UDP的正式規範。UDP在IP封包的協定号是17。

2、與所熟知的TCP(

傳輸控制協定 )協定一樣,UDP協定直接位于IP(網際協定)協定的頂層。根據OSI( 開放系統互連 )參考模型,UDP和TCP都屬于傳輸層協定。UDP協定的主要作用是将 網絡資料

流量壓縮成資料包的形式。一個典型的資料包就是一個二進制資料的傳輸機關。每一個資料包的前8個位元組用來包含報頭資訊,剩餘位元組則用來包含具體的傳輸資料。

3、實作過程

  1)發送方

public class Client {

    public static void send(){        
        try {
            DatagramSocket socket = new DatagramSocket();
            String text = "test";
            byte[] buf = text.getBytes();
            DatagramPacket packet = new DatagramPacket(buf, buf.length, InetAddress.getLocalHost(), 9002);
            socket.send(packet);
            socket.close();
        } catch (Exception e) {            
            e.printStackTrace();
            
        }
    }
    public static void main(String[] args) {
        send();
    }
}      

  2)接收方

public class Server {
    public void server(){
        try {
            System.out.println("start===================start");
            DatagramSocket socket = new DatagramSocket(9002);
            while(true){ 
                byte[] buf = new byte[2048];
                DatagramPacket packet = new DatagramPacket(buf, buf.length);
                socket.receive(packet);
                byte[] data = packet.getData();
                String msg = new String(data, 0, packet.getLength());
                System.out.println(msg);
            }
        } catch (Exception e) {
            e.printStackTrace();
            
        }
    }
    
    public static void main(String[] args) {
        new Thread(){
            @Override
            public void run() {
                Server server = new Server();
                server.server();
            }
        }.start();
    }
}      

4、線程:這裡接受方采用啟動一個線程的方式來接受,目的主要是能夠循環快捷的接受資料。發送方主要是自己測試資料來實作手動的方式來發送資料

5、UDP的使用很常見,因為使用UDP發包會咋網絡不好的時候出現丢包的情況,這種方式在遊戲上面應用的非常普遍,但是不影響具體的體驗。所有現在很多時候都會采用UDP的方式來發送和接受資料。

6、另外一點:UDP是不需要建立連接配接的,這種方式也可以自己來做資料分析,在不是本地實作的方式下,可以通過這種方式來抓取外部的資料做解析。這樣也不會影響程式的運作,還可以得到自己想要的資料。(建議正常使用不要有黑客行為!)

繼續閱讀