我正在编写一个服务器程序,该程序需要在通过类请求用户输入时将信息(例如客户端连接或断开连接)打印到控制台java.util.Scanner
。用户输入将是诸如“退出”之类的命令。
有没有办法在使用打印信息的同时等待用户输入System.out.println()
?如果我不能这样做,Scanner
还有System.out.println()
其他选择吗?
我正在编写一个服务器程序,该程序需要在通过类请求用户输入时将信息(例如客户端连接或断开连接)打印到控制台java.util.Scanner
。用户输入将是诸如“退出”之类的命令。
有没有办法在使用打印信息的同时等待用户输入System.out.println()
?如果我不能这样做,Scanner
还有System.out.println()
其他选择吗?
您需要将处理与接受新连接分开。
这是一个微不足道(有点做作)的例子
private static final class Handler implements Runnable {
private final Socket socket;
public Handler(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
//do stuff.
}
}
public static void main(String[] args) throws IOException {
final ServerSocket serverSocket = new ServerSocket();
final ExecutorService handlerExecutor = Executors.newFixedThreadPool(4);
while (true) {
final Socket socket = serverSocket.accept();
System.out.println("Got new connection, passing off to handler");
handlerExecutor.execute(new Handler(socket));
}
}
所以 mainThread
只处理接受一个连接并将其传递给handlerExecutor
调用run
. Handler
这意味着服务器可以继续等待新连接并记录它们,同时在其分配的各个连接中进行工作Handler
。