2013-05-11 52 views
3

我正在寫一個服務器程序,需要通過java.util.Scanner類請求用戶輸入時,將信息(如客戶端連接或斷開連接)打印到控制檯。用戶輸入將是諸如「退出」的命令。從掃描儀獲取用戶輸入時打印到控制檯

有沒有辦法等待用戶輸入,同時仍然使用System.out.println()打印信息?如果我不能這樣做ScannerSystem.out.println()是否有替代?

+3

使用兩個線程? – Keppil 2013-05-11 13:43:23

+1

完美運作。謝謝! – jakeprogrammer 2013-05-11 14:02:03

回答

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)); 
    } 

} 

所以僅與接受連接和其傳遞到其調用Handlerrun方法handlerExecutorThread交易。這意味着服務器可以繼續等待新連接,並在工作繼續進行時分配給他們的分配的Handler中的各個連接。