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 }