配置服務(wù)器端
1、導(dǎo)入相關(guān)庫
import java.io.*; import java.net.*;
2、創(chuàng)建ServerSocket對(duì)象,監(jiān)聽指定端口
int port = 8888; // 設(shè)置端口號(hào) ServerSocket serverSocket = new ServerSocket(port);
3、接收客戶端連接請(qǐng)求,創(chuàng)建Socket對(duì)象
Socket socket = serverSocket.accept(); // 阻塞等待客戶端連接
4、獲取輸入輸出流,實(shí)現(xiàn)數(shù)據(jù)的發(fā)送和接收
InputStream inputStream = socket.getInputStream(); // 獲取輸入流 OutputStream outputStream = socket.getOutputStream(); // 獲取輸出流
5、關(guān)閉資源
inputStream.close(); outputStream.close(); socket.close(); serverSocket.close();
配置客戶端
1、導(dǎo)入相關(guān)庫
import java.io.*; import java.net.*;
2、創(chuàng)建Socket對(duì)象,連接到服務(wù)器端
String host = "localhost"; // 設(shè)置服務(wù)器地址 int port = 8888; // 設(shè)置端口號(hào) Socket socket = new Socket(host, port);
3、獲取輸入輸出流,實(shí)現(xiàn)數(shù)據(jù)的發(fā)送和接收
InputStream inputStream = socket.getInputStream(); // 獲取輸入流 OutputStream outputStream = socket.getOutputStream(); // 獲取輸出流
4、發(fā)送數(shù)據(jù)到服務(wù)器端(這里以字符串為例)
String message = "Hello, Server!"; // 要發(fā)送的數(shù)據(jù) outputStream.write(message.getBytes()); // 將數(shù)據(jù)轉(zhuǎn)換為字節(jié)數(shù)組并寫入輸出流 outputStream.flush(); // 刷新輸出流,確保數(shù)據(jù)發(fā)送出去
5、接收服務(wù)器端返回的數(shù)據(jù)(這里以字符串為例)
byte[] buffer = new byte[1024]; // 創(chuàng)建一個(gè)緩沖區(qū),用于存儲(chǔ)接收到的數(shù)據(jù) int length = inputStream.read(buffer); // 讀取數(shù)據(jù)到緩沖區(qū),返回實(shí)際讀取的字節(jié)數(shù) String receivedMessage = new String(buffer, 0, length); // 將字節(jié)數(shù)組轉(zhuǎn)換為字符串,并去除末尾的換行符和空格符 System.out.println("Received from server: " + receivedMessage); // 打印接收到的數(shù)據(jù)
6、關(guān)閉資源
inputStream.close(); outputStream.close(); socket.close();
下面是一個(gè)簡化的介紹,展示了在Java中配置服務(wù)器端和客戶端TCP/IP協(xié)議時(shí)可能用到的主要方法和它們的描述。
ServerSocket serverSocket = new ServerSocket(port);
Socket clientSocket = serverSocket.accept();
InputStream in = clientSocket.getInputStream();
OutputStream out = clientSocket.getOutputStream();
InputStream in = clientSocket.getInputStream();
OutputStream out = clientSocket.getOutputStream();
Socket socket = new Socket(host, port);
InputStream
讀取數(shù)據(jù),使用OutputStream
發(fā)送數(shù)據(jù)InputStream
接收數(shù)據(jù),使用OutputStream
發(fā)送數(shù)據(jù)clientSocket.close();
serverSocket.close();
socket.close();
IOException
等IOException
等以下是每個(gè)步驟的詳細(xì)說明:
服務(wù)器端 (Server)
1、創(chuàng)建ServerSocket: 服務(wù)器端創(chuàng)建一個(gè)ServerSocket,用于監(jiān)聽客戶端的連接請(qǐng)求。
2、綁定端口: 在創(chuàng)建ServerSocket時(shí),指定服務(wù)器端將監(jiān)聽的端口號(hào)。
3、監(jiān)聽連接請(qǐng)求: 使用accept()
方法等待客戶端的連接請(qǐng)求。
4、輸入/輸出流: 當(dāng)一個(gè)客戶端連接被接受后,獲取對(duì)應(yīng)的輸入/輸出流,用于數(shù)據(jù)傳輸。
5、關(guān)閉連接: 在數(shù)據(jù)傳輸完成后,關(guān)閉與客戶端的連接,以及ServerSocket。
客戶端 (Client)
1、連接到服務(wù)器: 客戶端通過創(chuàng)建一個(gè)Socket并指定服務(wù)器的主機(jī)和端口來建立連接。
2、輸入/輸出流: 類似于服務(wù)器端,獲取輸入/輸出流以進(jìn)行數(shù)據(jù)傳輸。
3、讀寫數(shù)據(jù): 使用獲取的流來發(fā)送數(shù)據(jù)到服務(wù)器或從服務(wù)器接收數(shù)據(jù)。
4、關(guān)閉連接: 數(shù)據(jù)傳輸完成后,關(guān)閉Socket。
異常處理
在整個(gè)過程中,服務(wù)器端和客戶端都需要處理可能發(fā)生的異常,如IOException
,這通常是由于網(wǎng)絡(luò)問題或連接中斷導(dǎo)致的。
請(qǐng)注意,這是一個(gè)非常基礎(chǔ)的介紹,實(shí)際使用時(shí)你可能需要處理更多的細(xì)節(jié),例如多線程處理多個(gè)客戶端連接、使用BufferedReader和PrintWriter包裝流以方便文本處理、處理半關(guān)閉連接等。