TCP通信练习1 — 多发多收 客户端:多次发送数据 服务器:接收多次接收数据,并打印
时间: 2024-11-30 19:15:56 浏览: 36
要实现TCP通信中的客户端多次发送数据和服务器多次接收并打印的功能,你需要使用Java的`java.net.Socket`和`java.io.OutputStream`进行客户端的连接建立和数据发送,以及`java.net.ServerSocket`和`java.io.InputStream`用于服务器端的数据接收。这里是一个简化的示例:
**客户端(Client)代码**:
```java
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
public class Client {
public static void main(String[] args) throws Exception {
String serverHost = "localhost";
int serverPort = 8000; // 假设服务器监听的端口
for (int i = 1; i <= 5; i++) { // 发送5次数据
Socket socket = new Socket(serverHost, serverPort);
try (OutputStream outputStream = socket.getOutputStream()) {
String data = "Message " + i; // 数据格式为"Message X"
outputStream.write(data.getBytes()); // 发送数据
System.out.println("Sent: " + data);
} finally {
socket.close(); // 关闭连接
}
}
}
}
```
**服务器端(Server)代码**:
```java
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws IOException {
int serverPort = 8000; // 同样假设服务器监听的端口
ServerSocket serverSocket = new ServerSocket(serverPort);
while (true) {
Socket clientSocket = serverSocket.accept();
try (InputStream inputStream = clientSocket.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
PrintWriter writer = new PrintWriter(clientSocket.getOutputStream(), true)) {
String message;
while ((message = reader.readLine()) != null) {
System.out.println("Received: " + message); // 打印接收到的数据
writer.println("Echo: " + message); // 返回响应
}
} finally {
clientSocket.close(); // 关闭连接
}
}
}
}
```
在这个例子中,客户端循环5次发送不同的消息,服务器则每次接收到消息后打印出来,并返回一个确认消息给客户端。
**相关问题**:
1. TCP通信的基本原理是什么?
2. 如何在Java中创建和管理Socket连接?
3. 服务器端如何处理多个客户端同时连接?
4. 当数据到达时,服务器如何读取InputStream?
阅读全文