实现思路
- 创建
ServerSocket
对象,绑定到指定端口。
- 使用一个循环不断调用
accept()
方法来接受客户端连接。
- 每当接受一个客户端连接,就创建一个新的线程来处理该客户端的请求,这样可以实现并发处理多个客户端连接。
关键代码片段
import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class Server {
public static void main(String[] args) {
try (ServerSocket serverSocket = new ServerSocket(8080)) {
System.out.println("Server started on port 8080");
while (true) {
Socket clientSocket = serverSocket.accept();
System.out.println("Client connected: " + clientSocket);
// 为每个客户端连接创建一个新线程处理
new Thread(new ClientHandler(clientSocket)).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 (Scanner in = new Scanner(clientSocket.getInputStream());
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true)) {
while (in.hasNextLine()) {
String inputLine;
if ((inputLine = in.nextLine()) != null) {
System.out.println("Received from client: " + inputLine);
out.println("Server response: " + inputLine);
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
clientSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}