2014-05-20 83 views
0

當按下按鈕時,我使用bufferedReader從客戶端的服務器讀取輸出,但它工作正常,但是我無法使用方法errorHandling當連接關閉 - 我在try/catch中包裝(bufferedreader對象).readLine,但它不會引發異常,out.checkError也不會在連接失敗時返回true。該程序只是完全凍結,並沒有達到最後的捕獲如果連接結束。BufferedReader在連接到套接字後不拋出異常

 if(source==button) { 
     String back = ""; 

     if(out.checkError()){ 
      errorHandling("I/O Closed"); 
      return; 
     } 

     switch(currentOp){ 
      case(0): 
       out.println("R "+input.getText()); 
       break; 
      case(1): 
       out.println("P "+input.getText()); 
       break; 
      case(2): 
       out.println("M "+input.getText()); 
       break; 
     } 

     try{ 

      if((back=in.readLine())==null) throw new SocketServerException(); 
     } 

     catch(Exception e){ 
      errorHandling("I/O Closed"); 
      return; 
     } 
+0

聽起來不像連接正在關閉。 –

+0

是的,因爲我在我的電腦上手動關閉服務器。我認爲問題在於readLine()讀取直到它讀取一行,並且由於沒有任何可讀的內容,它只是掛起程序。我不知道如何解決它雖然..我嘗試與socket.isInputClosed等,但他們都返回false不管什麼 – user3657601

+0

好nvm它不是readline的錯,同樣的情況發生時,當我嘗試用read()讀一個字符 - 它凍結。 – user3657601

回答

0

你描述的情況是不可能的。它不會發生。對等套接字必須仍然打開。檢查你的觀察。

+0

是的,它是開放的,因爲我在ctrl + c在Linux控制檯關閉服務器,它不關閉。我不知道如何解決它。 – user3657601

+0

修復什麼?服務器不關閉?這是一個不同的問題。 – EJP