java網絡編程(UDP詳解)


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 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM