2011-11-28 296 views
1

我收到了一個監聽器,它監聽數據。現在的問題是發送數據的客戶端最終會自行關閉連接。基於我的代碼下面,我想知道我是否仍然需要執行這部分代碼,它在writeBuffer.close();客戶端關閉連接

我應該刪除最後一部分,只是把套接字關閉捕獲?

public void run() 
{ 
    BufferedWriter writeBuffer = null; 
    BufferedReader readBuffer = null; 

    String message=""; 
    try { 
     writeBuffer = new BufferedWriter(new OutputStreamWriter(receivedSocketConn1.getOutputStream())); 
     readBuffer = new BufferedReader(new InputStreamReader(receivedSocketConn1.getInputStream())); 

     int m = 0, count=0; 
     int nextChar=0;   

     while ((nextChar=readBuffer.read()) != -1) 
     { 
      message += (char) nextChar; 
      if (nextChar == '#') 
      { 
       System.out.println("\n\nSending PA : "+message); 
        writeBuffer.write("$PA\r\n"); 
       writeBuffer.flush(); 
       message="";    
       } 
     } 
    } 
    catch (Exception ex) 
    { 
     System.out.println("MyError:Exception has been caught in in the main first try"); 
    ex.printStackTrace(System.out); 
    } 
    /*finally 
    { 
     try 
     { 
      if (writeBuffer != null) 
     { 
      writeBuffer.close(); 
     } 
      else 
     { 
       System.out.println("MyError:writeBuffer is null in finally close"); 
     } 
     } 
     catch(IOException ex) 
     { 
      ex.printStackTrace(System.out); 
     } 
    }*/ 
} 
+0

交叉發佈到Oracle Java論壇:https://forums.oracle.com/forums/thread.jspa?threadID=2314932&tstart=0。 – EJP

回答

0

明確關閉您使用的連接總是一個好主意。考慮一下,客戶端可能不會關閉連接(當然,那麼你必須實現某種超時機制,在一段時間後關閉服務器端的連接,但這是不同的物)。

我的觀點是 - 從不傷害要小心,並以保守的方式管理您的資源。

+0

那麼,我應該怎樣更改我的密碼呢?根據您在我的方案中的經驗,客戶應該關閉連接,我應該怎麼做?問題我的代碼在大多數時間運行良好,但突然間我發現有些垃圾,並且即將結束連接。 – user1056561

+0

你可以定義一個來自客戶端的特殊消息,例如「退出」,這樣當你收到它時,你退出循環並讓'finally'塊關閉連接。 –

+0

客戶端是GPS設備的問題。它的運行方式是,在15秒後發送所有數據後,它將關閉與服務器的連接。你認爲腐敗可能是服務器在客戶端之前關閉連接嗎? – user1056561

相關問題