3

我正在编写一个服务器程序,该程序需要在通过类请求用户输入时将信息(例如客户端连接或断开连接)打印到控制台java.util.Scanner。用户输入将是诸如“退出”之类的命令。

有没有办法在使用打印信息的同时等待用户输入System.out.println()?如果我不能这样做,Scanner还有System.out.println()其他选择吗?

4

1 回答 1

0

您需要将处理与接受新连接分开。

这是一个微不足道(有点做作)的例子

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

于 2013-05-11T14:06:49.803 回答