TCP客戶端TCPClient
通過java.net.Socket類創(chuàng)建客戶端對象
官方文檔介紹:此類實(shí)現(xiàn)客戶端套接字(也可以就叫“套接字”)。套接字是兩臺機(jī)器間通信的端點(diǎn)。
構(gòu)造方法:
Socket(String host, int port) 創(chuàng)建一個(gè)流套接字并將其連接到指定主機(jī)上的指定端口號。
成員方法:
OutputStream getOutputStream() 返回此套接字的輸出流。
InputStream getInputStream() 返回此套接字的輸入流。
使用步驟
- 創(chuàng)建Socket對象,通過構(gòu)造方法指定服務(wù)器主機(jī)名和端口;
- 通過Socket對象的getOutputStream()獲取套接字的輸出流OutputStream對象;
- 通過OutputStream對象的write方法向服務(wù)器發(fā)送數(shù)據(jù);
- 使用Socket對象的getInputStream()獲取套接字的輸入流InputStream對象;
- 通過InputStream對象的read方法讀取服務(wù)器回發(fā)的數(shù)據(jù);
- 釋放資源(socket.close()) 關(guān)閉套接字。
代碼實(shí)現(xiàn)
public static void main(String[] args) throws IOException {
// 1. 創(chuàng)建Socket對象,通過構(gòu)造方法指定服務(wù)器主機(jī)名和端口
Socket socket = new Socket("127.0.0.1", 8888);
// 2. 通過Socket對象的getOutputStream()獲取套接字的輸出流OutputStream對象
OutputStream os = socket.getOutputStream();
// 3. 通過OutputStream對象的write方法向服務(wù)器發(fā)送數(shù)據(jù)
os.write("請求連接1".getBytes());
// 5.使用Socket對象的getInputStream()獲取套接字的輸入流InputStream對象
InputStream is = socket.getInputStream();
// 6. 通過InputStream對象的read方法讀取服務(wù)器回發(fā)的數(shù)據(jù)
byte[] bytes = new byte[32];
int len = is.read(bytes); // len表示獲取有效的字節(jié)數(shù)
System.out.println(new String(bytes, 0, len));
// 7. 釋放資源(socket.close()) 關(guān)閉套接字
socket.close();
}
注意
服務(wù)器需要先啟動(dòng)后,再啟動(dòng)客戶端,否則會(huì)拋出異常
java.net.ConnectException: Connection refused: connect

異常截圖.png
TCP服務(wù)端TCPServer
通過java.net.ServerSocket類來創(chuàng)建服務(wù)器對象
此類實(shí)現(xiàn)服務(wù)器套接字。服務(wù)器套接字等待請求通過網(wǎng)絡(luò)傳入。它基于該請求執(zhí)行某些操作,然后可能向請求者返回結(jié)果。
構(gòu)造方法:
ServerSocket(int port) 創(chuàng)建綁定到特定端口的服務(wù)器套接字。
成員方法:
Socket accept() 偵聽并接受到此套接字的連接。(服務(wù)器類沒有Socket類,需求方法獲取客戶端的Socket對象)
使用步驟
- 創(chuàng)建ServerSocket對象,通過構(gòu)造方法指定客戶端連接端口
- 通過accept方法獲取客戶端的Socket對象
- 通過Socket對象的getInputStream()獲取套接字的輸出流InputStream對象
- 通過InputStream對象的read方法讀取客戶端發(fā)送的數(shù)據(jù)
- 通過Socket對象的getOutputStream()獲取套接字的輸出流OutputStream對象
- 通過OutputStream對象的write方法向客戶端發(fā)送數(shù)據(jù)
- 釋放資源,關(guān)閉套接字
代碼實(shí)現(xiàn)
public static void main(String[] args) throws IOException {
// 1. 創(chuàng)建ServerSocket對象,通過構(gòu)造方法指定客戶端連接端口
ServerSocket serverSocket = new ServerSocket(8888);
// 2. 通過accept方法獲取客戶端的Socket對象
Socket socket = serverSocket.accept();
// 3. 通過Socket對象的getInputStream()獲取套接字的輸出流InputStream對象
InputStream is = socket.getInputStream();
// 4. 通過InputStream對象的read方法讀取客戶端發(fā)送的數(shù)據(jù)
byte[] bytes = new byte[32];
int len = is.read(bytes);
System.out.println(new String(bytes, 0, len));
// 5. 通過Socket對象的getOutputStream()獲取套接字的輸出流OutputStream對象
OutputStream os = socket.getOutputStream();
// 6. 通過OutputStream對象的write方法向客戶端發(fā)送數(shù)據(jù)
os.write("連接成功".getBytes());
// 7. 釋放資源,關(guān)閉套接字
socket.close();
serverSocket.close();
}
運(yùn)行步驟、結(jié)果
先運(yùn)行服務(wù)端,在啟動(dòng)客戶端
服務(wù)器控制臺輸出
請求連接1
客戶端控制臺輸出
連接成功