2013-11-21 191 views
0

我在單個客戶端和服務器之間有套接字連接。我已經實現了登錄,註銷,發送等功能,並在服務器端創建新用戶,然後向服務器和客戶端輸出不同的消息。Java Socket的終止客戶端連接

我需要在用戶使用註銷功能的同時仍然運行服務器端時實現連接關閉。我想到了一個System.exit(0)在客戶端的正確位置能夠做到這一點,但我實施它比我想象的更麻煩。

我試圖把它放在我覺得我得到的輸出從服務器返回,見下面的客戶端,while循環中還有一個循環,如果尋找「退出」的迴應:

客戶:

   if(ins.readLine().contains("Logged Out")) 
       { 
        System.exit(0); 
       } 
       else 
       { 
        System.out.println(ins.readLine()); 
       } 

沒有客戶端服務器一切完美的while循環中,如果循環,但用如果循環出現,它需要一次命令,然後不再提示輸入命令,並保持連接打開。在它不斷提示用戶輸入命令並保持連接打開之前。

想法?

回答

1

你讀兩行而不是一行。一個在這裏檢查你從服務器得到什麼:

if(ins.readLine().contains("Logged Out")) 

另外一個顯示你從服務器得到什麼:

System.out.println(ins.readLine()); 

要解決這個問題,在變量中存儲服務器響應:

String serverResponse = ins.readLine(); 
if (serverResponse.contains("Logged Out")) { 
    System.exit(0); 
} else { 
    // reuse serverResponse instead of reading another line... 
    System.out.println(serverResponse); 
} 
+0

完美答案!謝謝你的支持! – ZAX

相關問題