UDP詳解
一,TCP/IP協議棧中,TCP協議和UDP協議的聯系和區別?
聯系:
TCP和UDP是TCP/IP協議棧中傳輸層的兩個協議,它們使用網絡層功能把數據包發送到目的地,從而為應用層提供網絡服務。
區別:
1. TCP是面向連接的傳輸。UDP是無連接的傳輸。
2. TCP保證數據按照發送順序到達,UDP無法保證。
4. TCP是可靠性傳輸,而UDP則是不可靠傳輸。
5. UDP因為少了很多控制信息,所以傳輸速度比TCP速度快。
6. TCP適合用於傳輸大量數據,UDP適合用於傳輸小量數據。
舉例: TCP的server和client之間通信就好比兩個人打電話。UDP的server和client之間的通信就像兩個人發電報或者發短信。
二,UDP通訊協議的特點:
1. 將數據極封裝為數據包,面向無連接。
2. 每個數據包大小限制在64K中
3.因為無連接,所以不可靠
4. 因為不需要建立連接,所以速度快
5.udp 通訊是不分服務端與客戶端的,只分發送端與接收端。
三,怎樣來編寫UDP?
發送數據步驟:
1.創建socket服務
2.創建數據包
3.將數據封裝到數據包中,添加ip和端口以及數據
4.發送
5.關閉資源
接收數據步驟:
1.創建socket服務,並監聽端口
2.創建數據包,用來接收數據
3.用socket接收數據到數據包中
4.從數據包中取出數據
5.關閉資源
四,代碼實現UDP通信
1.客戶端代碼
1 import java.io.IOException; 2 import java.net.DatagramPacket; 3 import java.net.DatagramSocket; 4 import java.net.InetAddress; 5 import java.util.Scanner; 6 7 public class User { 8 static Scanner sc= new Scanner(System.in); 9 public static void main(String[] args) throws IOException { 10 //1.創建客戶端套接字 11 DatagramSocket ds = new DatagramSocket(); 12 //2.創建客戶端發送數據包 13 while(true){ 14 System.out.println("請輸入要發送的信息:"); 15 String info = sc.nextLine(); 16 byte []buf =info.getBytes(); 17 DatagramPacket dp = new DatagramPacket(buf, buf.length, 18 InetAddress.getByName("localhost"), 152); 19 //3.發送數據包 20 ds.send(dp); 21 //4.結束發送循環 22 if("886".equals(info)){ 23 break; 24 } 25 } 26 //5.關閉套接字 27 ds.close(); 28 } 29 }
2.服務端代碼
1 import java.io.IOException; 2 import java.net.DatagramPacket; 3 import java.net.DatagramSocket; 4 import java.net.InetAddress; 5 6 public class Server { 7 public static void main(String[] args) throws IOException { 8 //1.創建服務端套接字 9 DatagramSocket ds = new DatagramSocket(152);//注意指定端口 10 //2.創建接受客戶端信息的空數據包 11 while(true){ 12 byte [] buf =new byte[1024]; 13 DatagramPacket dp = new DatagramPacket(buf, buf.length); 14 //3.接受數據 15 ds.receive(dp); 16 //4.拆分數據 17 byte[] data = dp.getData(); 18 //5.獲取客戶端IP和主機名 19 InetAddress ip = dp.getAddress(); 20 String host = ip.getHostName(); 21 //6.讀取數據 22 String info = new String(buf,0,buf.length); 23 System.out.println("來自"+host+"的消息是:"+info); 24 ds.close(); 25 //7.關閉套接字 26 } 27 } 28 }
精品java學習視頻
java的IO流技術:鏈接:https://pan.baidu.com/s/1KWR9JHQ20uy0mx-1CIBwvA 提取碼:3dn8