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