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是不需要建立連接的,這種方式也可以自己來做數據分析,在不是本地實現的方式下,可以通過這種方式來抓取外部的數據做解析。這樣也不會影響程序的運行,還可以得到自己想要的數據。(建議正常使用不要有黑客行為!)