一、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