UDP協議&TCP協議


域名:

DN (Domain name)是由一串由點分隔的名字組成的Internet上某一台計算機或計算機組的名稱。

域名服務系統:DNS:它可以作為將域名和IP地址相互映射的一個分布式數據庫。

協議:

    應用層常見協議:

  http協議:超文本傳輸語言。

  ftp協議:文件傳輸協議

  smtp協議:簡單郵件傳輸協議

 傳輸層的協議:

  UDP協議:用戶數據報協議,面向無連接的,簡單不可靠的傳輸層協議。

  1.   面向無連接
  2.        通過數據報包來進行傳輸,每個數據報包大小不會超過64k.
  3.        不可靠的傳輸。
  4.        傳輸速度快。

  TCP協議:傳輸控制協議,一種面向連接的,可靠的,基於字節流的傳輸層通信協議。

  TCP協議傳輸過程:

  要經過三次握手,確定通道的連接。

  建立流的傳輸通道,進行數據的傳輸。

  TCP傳輸協議的特點:

  1.   面向連接的
  2.        通過流通道進行數據的傳輸
  3.        可靠的連接
  4.        速度慢

UDP協議傳輸

代碼示例:

發送端:

 1 /**
 2 
 3 1. 發送數據報包
 4 ①  創建發送端的套接字對象。
 5 ②  打包數據,用的 DatagramPacket
 6 DatagramPacket(byte[] buf, int length, InetAddress address, int port)
 7 ③  發送
 8 send(dp)
 9 ④  關閉資源
10 close
11 */
12 public class  發送端 {
13 public static void main(String[] args) throws IOException, UnknownHostException {
14 // ①  創建發送端的套接字對象。
15 DatagramSocket ds=new DatagramSocket();
16 String s=" 接收端您好 ";
17 byte[] buf=s.getBytes();
18 DatagramPacket dp=new DatagramPacket(buf, buf.length, InetAddress.getLocalHost(), 9000);
19 // 發送
20 ds.send(dp);
21 // 等待接收端的響應 --> 接收端
22 // 空的數據報包接收
23 byte[] buf1=new byte[1024];
24 DatagramPacket dp1=new DatagramPacket(buf1, buf1.length);
25 ds.receive(dp1);
26 // 顯示
27 System.out.println(new String(dp1.getData()));
28 ds.close();
29 }
30 }

 

接收端:

 1 /**
 2 . 用來接收數據報包
 3 ①  創建一個接收數據的套接字。
 4 ②  創建一個空的數據報包來接收數據
 5 ③  接收 receive(DatagramPacket p)
 6 ④  關閉
 7 */
 8 public class  接收端 {
 9 public static void main(String[] args) throws IOException {
10 // ①  創建一個接收數據的套接字。
11 DatagramSocket ds=new DatagramSocket(9000);
12 // ②  創建一個空的數據報包來接收數據
13 // DatagramPacket(byte[] buf, int length)
14 byte[] buf=new byte[1024];
15 DatagramPacket dp=new DatagramPacket(buf, buf.length);
16 // 接收
17 ds.receive(dp);
18 // 顯示 getLength  返回接收到的數據的字節長度
19 System.out.println(new String(buf,0,dp.getLength()));
20 // 發送端響應 -- 》發送端
21 //getAddress/getPort  獲取發送端的 ip 地址與端口號
22 DatagramPacket p=new DatagramPacket(" 發送端您好 ".getBytes(), " 發送端您好 ".getBytes().length, d
23 p.getAddress(), dp.getPort());
24 ds.send(p);
25 // 關閉
26 ds.close();
27 }
28 }

 

 

 

 

 

TCP協議傳輸

代碼示例:

服務器端代碼:

 1 package DemoEE;
 2 
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5 import java.net.ServerSocket;
 6 import java.net.Socket;
 7 
 8 public class 服務器端3 {
 9 
10     public static void main(String[] args) throws IOException {
11         System.out.println("正在等待客戶端連接");
12         ServerSocket ss=new ServerSocket(9004);
13         Socket s=ss.accept();
14         InputStream is=s.getInputStream();        
15         byte[] bt=new byte[1024];
16         int count=0;
17         while((count=is.read(bt))!=-1) {
18             System.out.println(new String(bt,0,count));
19         }
20     }
21 }

 

客戶端代碼:

 1 package DemoEE;
 2 
 3 import java.io.IOException;
 4 import java.io.OutputStream;
 5 import java.net.InetAddress;
 6 import java.net.Socket;
 7 
 8 public class 客戶端3 {
 9 
10     public static void main(String[] args) throws IOException, IOException {
11         Socket s=new Socket(InetAddress.getByName("localhost"),9004);
12         OutputStream os=s.getOutputStream();
13         os.write(new String("服務器端你好").getBytes());
14         os.close();
15         s.close();
16         
17     }
18 }

 

先執行服務器端,執行效果:

執行客戶端,執行效果:

 

代碼示例二:

服務器端:

 1 /**
 2 
 3 1. 創建服務器端的對象: 在指定端口監聽是否有客戶端進行連接。
 4 2. 通過 accept 方法進行監聽,並通過三次握手建立連接流通道。
 5 3. 從客戶端讀取內容,獲取流通道中的輸入流
 6 4. 關閉資源
 7 */
 8 public class  服務器端 {
 9 public static void main(String[] args) throws IOException {
10 // 1. 創建服務器端的對象: 在指定端口監聽是否有客戶端進行連接。
11 ServerSocket ss=new ServerSocket(9000);
12 //2. 通過 accept 方法進行監聽,並通過三次握手建立連接流通道。
13 // 返回值為當前要連接的客戶端對象
14 System.out.println(" 等待客戶端的連接。。。。 ");
15 Socket s=ss.accept();
16 //3. 從客戶端讀取內容,獲取流通道中的輸入流
17 InputStream is = s.getInputStream();
18 // 讀取
19 byte[] b=new byte[1024];
20 int count=0;
21 while((count=is.read(b))!=-1) {
22 System.out.println(new String(b,0,count));
23 }
24 // 關閉資源
25 is.close();
26 ss.close();
27 }
28 }

 

客戶端:

 1 /**
 2 
 3 1. 創建客戶端的對象: 指定服務器,服務器的端口
 4 2. 向服務器端寫入,獲取流通道中的輸出流
 5 3. 關閉資源
 6 */
 7 public class  客戶端 {
 8 public static void main(String[] args) throws IOException {
 9 // 1. 創建客戶端的對象: 指定服務器,服務器的端口
10 Socket s=new Socket(InetAddress.getByName("localhost"), 9000);
11 // 2. 向服務器端寫入,獲取流通道中的輸出流
12 OutputStream os = s.getOutputStream();
13 os.write(" 服務器端您好 ".getBytes());
14 // 關閉資源
15 os.close();
16 s.close();
17 }
18 }

 

 

代碼示例三:

進階班客戶端:

 1 package com.tcp2;
 2 import java.io.BufferedReader;
 3 import java.io.BufferedWriter;
 4 import java.io.InputStreamReader;
 5 import java.io.OutputStream;
 6 import java.io.OutputStreamWriter;
 7 import java.net.InetAddress;
 8 import java.net.Socket;
 9 /**
10 
11 1. 客戶端
12 */
13 public class  客戶端 {
14 public static void main(String[] args) {
15 // 客戶端對象
16 try(Socket client=new Socket(InetAddress.getByName("localhost"), 9000);
17 // 用戶輸入
18 BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
19 // 向服務器端發送信息,輸出流
20 BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
21 // 讀取從服務器寫入的內容 輸入流
22 BufferedReader bre=new BufferedReader(new InputStreamReader(client.getInputStream()));
23 ){
24 System.out.println(" 客戶端要發送到服務器端的內容為: ");
25 // 通過用戶輸入信息
26 String msg = br.readLine();
27 // 將用戶輸入的信息發送到服務器端
28 bw.write(msg);
29 // 換行的標識
30 bw.newLine();
31 // 刷新緩沖區
32 bw.flush();
33 // 等待接收
34 String msgServer = bre.readLine();
35 System.out.println(" 從服務器獲取的信息: "+msgServer);
36 }catch (Exception e) {
37 e.printStackTrace();
38 }
39 }
40 }

 

進階版服務器端:

 1 package com.tcp2;
 2 import java.io.BufferedReader;
 3 import java.io.BufferedWriter;
 4 import java.io.InputStreamReader;
 5 import java.io.OutputStreamWriter;
 6 import java.net.ServerSocket;
 7 import java.net.Socket;
 8 /**
 9 
10 1. 服務器端
11 */
12 public class  服務器端 {
13 public static void main(String[] args) {
14 // 服務器
15 try(ServerSocket ss=new ServerSocket(9000);){
16 System.out.println(" 等待客戶端的連接。。。。。 ");
17 // 連接每一個客戶端
18 try(Socket client=ss.accept();
19 // 讀取客戶端發送的信息
20 BufferedReader br=new BufferedReader(new InputStreamReader(client.getInputStream()));
21 // 獲取服務器端用戶輸入的信息
22 BufferedReader bin=new BufferedReader(new InputStreamReader(System.in));
23 //  向客戶端寫入信息
24 BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
25 ){
26 // 讀取客戶端發來的信息
27 String clientMsg = br.readLine();
28 System.out.println(" 從客戶端發來的消息為: "+clientMsg);
29 System.out.println(" 服務器端要發送到客戶端的內容為: ");
30 // 服務器端用戶輸入信息
31 String input = bin.readLine();
32 // 向客戶端寫入
33 bw.write(input);
34 bw.newLine();
35 bw.flush();
36 }catch (Exception e) {
37 e.printStackTrace();
38 }
39 }catch (Exception e) {
40 e.printStackTrace();
41 }
42 }
43 }

 


免責聲明!

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



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