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

一、UDP 是User Datagram Protocol的簡稱, 中文名是用戶數據報協議,是OSI(Open System Interconnection,開放式系統互聯) 參考模型中一種無鏈接的傳輸層協議,提供面向事務的簡單不可靠信息傳送服務,IETF RFC 768是UDP的正式規範。UDP在IP報文的協議號是17。網絡

二、與所熟知的TCP(傳輸控制協議)協議同樣,UDP協議直接位於IP(網際協議)協議的頂層。根據OSI(開放系統互連)參考模型,UDP和TCP都屬於傳輸層協議。UDP協議的主要做用是將網絡數據流量壓縮成數據包的形式。一個典型的數據包就是一個二進制數據的傳輸單位。每個數據包的前8個字節用來包含報頭信息,剩餘字節則用來包含具體的傳輸數據。socket

三、實現過程ide

  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)接收方spa

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();
    }
}

四、線程:這裏接受方採用啓動一個線程的方式來接受,目的主要是可以循環快捷的接受數據。發送方主要是本身測試數據來實現手動的方式來發送數據
五、UDP的使用很常見,由於使用UDP發包會咋網絡很差的時候出現丟包的狀況,這種方式在遊戲上面應用的很是廣泛,可是不影響具體的體驗。全部如今不少時候都會採用UDP的方式來發送和接受數據。線程

六、另一點:UDP是不須要創建鏈接的,這種方式也能夠本身來作數據分析,在不是本地實現的方式下,能夠經過這種方式來抓取外部的數據作解析。這樣也不會影響程序的運行,還能夠獲得本身想要的數據。(建議正常使用不要有黑客行爲!)code

相關文章
相關標籤/搜索