编写基于TCP协议的Socket通信客户和服务器端程序,两端进程可以交互 异步方式发送和接收数据(接收和发送消息的工作由线程完成)。 服务器端可以将收发的数据保存至服务器的文件中,客户端可以访问。
时间: 2024-12-08 09:13:24 浏览: 14
在编写基于TCP协议的Socket通信的客户端和服务器端程序时,首先需要理解TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的通信协议。以下是异步方式下创建服务器端和客户端的基本步骤:
**服务器端(Server):**
1. **创建监听套接字** - 使用`ServerSocket`类创建一个新的监听端口。
2. **绑定地址和端口** - 将服务器设置到特定的IP地址和端口号上,如0.0.0.0表示监听所有网络接口。
3. **启动监听** - 开始监听新的连接请求。
4. **接受连接** - 当有客户端连接时,通过`accept()`方法创建一个新的Socket连接。
5. **创建线程** - 对每个新连接,创建一个新线程处理请求,以便并发处理多个客户端连接。
6. **读取和写入数据** - 使用`InputStream`和`OutputStream`读取和发送数据,同时将数据保存到文件中。
7. **关闭连接** - 完成数据交换后,关闭连接。
**客户端(Client):**
1. **创建Socket连接** - 使用`Socket`类连接到指定的服务器地址和端口。
2. **开启异步操作** - 创建`BufferedReader`和`PrintWriter`用于读写数据,它们通常会在后台线程中工作。
3. **发送数据** - 发送请求或消息给服务器,比如用户输入的信息。
4. **接收响应** - 从服务器读取并显示接收的数据。
5. **断开连接** - 数据传输结束后,关闭连接。
**示例代码片段**(简化版):
```java
// 服务器端
ServerSocket server = new ServerSocket(8000);
Socket clientSocket = server.accept();
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
PrintWriter writer = new PrintWriter(clientSocket.getOutputStream())) {
String message;
while ((message = reader.readLine()) != null) {
// 保存数据到文件
saveToLogFile(message);
writer.println("Received: " + message);
}
} catch (IOException e) {
e.printStackTrace();
}
}
});
thread.start();
// 客户端
Socket socket = new Socket("localhost", 8000);
try (BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter writer = new PrintWriter(socket.getOutputStream(), true)) {
String input;
while ((input = reader.readLine()) != null) {
System.out.println("Server says: " + input);
}
writer.println("Sending data...");
} finally {
socket.close();
}
```
阅读全文