Java 编写一个简单的多线程 TCP 服务器,可以同时处理多个客户端连接
import java.io.*;
import java.net.*;
public class TCPServer {
public static final int PORT = 9000;
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(PORT);
System.out.println("TCP Server is running on port " + PORT);
while (true) {
Socket clientSocket = serverSocket.accept();
System.out.println("Accepted connection from " + clientSocket.getInetAddress().getHostName());
ClientHandler clientHandler = new ClientHandler(clientSocket);
new Thread(clientHandler).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
static class ClientHandler implements Runnable {
private final Socket clientSocket;
public ClientHandler(Socket clientSocket) {
this.clientSocket = clientSocket;
}
@Override
public void run() {
try {
InputStream inputStream = clientSocket.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
OutputStream outputStream = clientSocket.getOutputStream();
PrintWriter writer = new PrintWriter(outputStream, true);
writer.println("Welcome to the TCP Server!");
String line;
while ((line = reader.readLine()) != null) {
System.out.println("Received message from " + clientSocket.getInetAddress().getHostName() + ": " + line);
writer.println("You said: " + line);
if (line.equals("bye")) {
break;
}
}
clientSocket.close();
System.out.println("Connection closed by " + clientSocket.getInetAddress().getHostName());
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
在上面的代码中,我们定义了一个名为 TCPServer 的类,它使用 Java 的 Socket API 实现了一个简单的多线程 TCP 服务器。服务器监听 9000 端口,并在接收到客户端连接时启动一个新线程处理该连接。
我们使用一个名为 ClientHandler 的内部类来处理每个客户端连接。在 run 方法中,我们首先向客户端发送欢迎消息,然后开始循环读取客户端发送的消息,并将其回送给客户端。如果客户端发送了“bye”消息,则退出循环并关闭连接。
要运行此代码,请将其保存在名为 TCPServer.java 的文件中,并在终端中运行以下命令编译并运行服务器:
javac TCPServer.java
java TCPServer
然后,您可以使用 telnet 命令或其他 TCP 客户端工具连接到服务器:
telnet localhost 9000
您应该能够在 telnet 中输入消息并查看服务器的响应。如果您同时打开多个客户端连接,您将看到服务器能够同时处理多个连接,并使用不同的线程为每个连接提供服务。