TCP通訊

鑫淼的世界發表於2020-05-14
 1 package com.itheima.demo01.TCP;
 2 
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5 import java.io.OutputStream;
 6 import java.net.Socket;
 7 
 8 /*
 9     TCP通訊的客戶端:向伺服器傳送連線請求,給伺服器傳送資料,讀取伺服器回寫的資料
10     表示客戶端的類:
11         java.net.Socket:此類實現客戶端套接字(也可以就叫“套接字”)。套接字是兩臺機器間通訊的端點。
12         套接字:包含了IP地址和埠號的網路單位
13 
14     構造方法:
15         Socket(String host, int port) 建立一個流套接字並將其連線到指定主機上的指定埠號。
16         引數:
17             String host:伺服器主機的名稱/伺服器的IP地址
18             int port:伺服器的埠號
19 
20     成員方法:
21         OutputStream getOutputStream() 返回此套接字的輸出流。
22         InputStream getInputStream() 返回此套接字的輸入流。
23         void close() 關閉此套接字。
24 
25     實現步驟:
26         1.建立一個客戶端物件Socket,構造方法繫結伺服器的IP地址和埠號
27         2.使用Socket物件中的方法getOutputStream()獲取網路位元組輸出流OutputStream物件
28         3.使用網路位元組輸出流OutputStream物件中的方法write,給伺服器傳送資料
29         4.使用Socket物件中的方法getInputStream()獲取網路位元組輸入流InputStream物件
30         5.使用網路位元組輸入流InputStream物件中的方法read,讀取伺服器回寫的資料
31         6.釋放資源(Socket)
32      注意:
33         1.客戶端和伺服器端進行互動,必須使用Socket中提供的網路流,不能使用自己建立的流物件
34         2.當我們建立客戶端物件Socket的時候,就會去請求伺服器和伺服器經過3次握手建立連線通路
35             這時如果伺服器沒有啟動,那麼就會丟擲異常ConnectException: Connection refused: connect
36             如果伺服器已經啟動,那麼就可以進行互動了
37  */
38 public class TCPClient {
39     public static void main(String[] args) throws IOException {
40         //1.建立一個客戶端物件Socket,構造方法繫結伺服器的IP地址和埠號
41         Socket socket = new Socket("127.0.0.1",8888);
42         //2.使用Socket物件中的方法getOutputStream()獲取網路位元組輸出流OutputStream物件
43         OutputStream os = socket.getOutputStream();
44         //3.使用網路位元組輸出流OutputStream物件中的方法write,給伺服器傳送資料
45         os.write("你好伺服器".getBytes());
46 
47         //4.使用Socket物件中的方法getInputStream()獲取網路位元組輸入流InputStream物件
48         InputStream is = socket.getInputStream();
49 
50         //5.使用網路位元組輸入流InputStream物件中的方法read,讀取伺服器回寫的資料
51         byte[] bytes = new byte[1024];
52         int len = is.read(bytes);
53         System.out.println(new String(bytes,0,len));
54 
55         //6.釋放資源(Socket)
56         socket.close();
57 
58     }
59 
60 }
 1 package com.itheima.demo01.TCP;
 2 
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5 import java.io.OutputStream;
 6 import java.net.ServerSocket;
 7 import java.net.Socket;
 8 
 9 /*
10     TCP通訊的伺服器端:接收客戶端的請求,讀取客戶端傳送的資料,給客戶端回寫資料
11     表示伺服器的類:
12         java.net.ServerSocket:此類實現伺服器套接字。
13 
14     構造方法:
15         ServerSocket(int port) 建立繫結到特定埠的伺服器套接字。
16 
17     伺服器端必須明確一件事情,必須的知道是哪個客戶端請求的伺服器
18     所以可以使用accept方法獲取到請求的客戶端物件Socket
19     成員方法:
20         Socket accept() 偵聽並接受到此套接字的連線。
21 
22     伺服器的實現步驟:
23         1.建立伺服器ServerSocket物件和系統要指定的埠號
24         2.使用ServerSocket物件中的方法accept,獲取到請求的客戶端物件Socket
25         3.使用Socket物件中的方法getInputStream()獲取網路位元組輸入流InputStream物件
26         4.使用網路位元組輸入流InputStream物件中的方法read,讀取客戶端傳送的資料
27         5.使用Socket物件中的方法getOutputStream()獲取網路位元組輸出流OutputStream物件
28         6.使用網路位元組輸出流OutputStream物件中的方法write,給客戶端回寫資料
29         7.釋放資源(Socket,ServerSocket)
30  */
31 public class TCPServer {
32     public static void main(String[] args) throws IOException {
33         //1.建立伺服器ServerSocket物件和系統要指定的埠號
34         ServerSocket server = new ServerSocket(8888);
35         //2.使用ServerSocket物件中的方法accept,獲取到請求的客戶端物件Socket
36         Socket socket = server.accept();
37         //3.使用Socket物件中的方法getInputStream()獲取網路位元組輸入流InputStream物件
38         InputStream is = socket.getInputStream();
39         //4.使用網路位元組輸入流InputStream物件中的方法read,讀取客戶端傳送的資料
40         byte[] bytes = new byte[1024];
41         int len = is.read(bytes);
42         System.out.println(new String(bytes,0,len));
43         //5.使用Socket物件中的方法getOutputStream()獲取網路位元組輸出流OutputStream物件
44         OutputStream os = socket.getOutputStream();
45         //6.使用網路位元組輸出流OutputStream物件中的方法write,給客戶端回寫資料
46         os.write("收到謝謝".getBytes());
47         //7.釋放資源(Socket,ServerSocket)
48         socket.close();
49         server.close();
50     }
51 }

 

相關文章