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 }