2017-07-10 84 views
1

感謝您花時間看我的小問題。Java套接字ServerSide輸入

我最近進入Java套接字並查找了一個簡單的教程,在這裏找到了一個多客戶端聊天應用程序http://cs.lmu.edu/~ray/notes/javanetexamples/它是頁面上的最後一個示例。

它工作正常,但我也想處理服務器端輸入,如斷開某些用戶每個命令或類似的東西,只是「聽」服務器控制檯中的用戶輸入,我似乎不能包住我的頭在這個特定的情況下。

try { 
     while (true) { 
      new Handler(listener.accept()).start(); 
     }    
    } 

,如果我只是檢查try塊會等待用戶輸入直到用戶連接>壞內部用戶輸入,我想保持服務器在他的正常循環,直到輸入的命令。

在這個簡單的例子中還有什麼辦法做到這一點嗎?還是需要像一個額外的線程來監聽用戶輸入,同時仍然循環處理器,如果是的話,我會怎麼做呢?

得到任何幫助=)


編輯: 解決使用不同的線程的問題: 首先一個添加一個新的類來處理新的線程來監聽新連接:

public class HandleClientsThread extends Thread{ 

private static int PORT; 

public HandleClientsThread(int port) { 
    this.PORT = port; 
} 

public void run() { 
    try { 
     System.out.println("Handle Clients Thread Start"); 
     ServerSocket listener = new ServerSocket(PORT); 
     try { 
      while (true) { 
       new Client(listener.accept()).start(); 
      }    
     } finally { 
      listener.close();   
     } 
    } catch(IOException e) { } 
}   

}

然後我所需要做的主要服務器是啓動線程,讓它在後臺運行,而WA iting對用戶輸入:

public static void main(String[] args) throws Exception { 
    System.out.println("----- Server running on Port " + PORT + " -----"); 

    new HandleClientsThread(PORT).start();  

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
    while(true) { 
     String cmd = br.readLine(); 
     switch (cmd) { 

如果有人看到與此類似違規一些編程模式或壞的東西,在做的這樣,我將不勝感激它可能發生的任何問題=)

回答

-1

另一個線程會最適合你的管理選項。

另一種方法是在您希望執行不同操作時中斷處理程序線程,並在完成後恢復/重新啓動線程。

+0

這應該可能是一個評論而不是答案。 – bhspencer

+0

我試着用線程運氣,因爲我無法得到我的頭如何在while循環中中斷處理程序線程,而不檢查循環運行時不可能的用戶輸入。無論如何感謝=) – JasonBr