TCP通訊

 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 }