2016-08-26 82 views
0

當我試圖發送延遲連接上的數據時,ne nevers到達服務器,也沒有在打印機上檢測到任何錯誤。這也適用於心跳系統。
我有一個半心跳系統正在運行。它的要點是如果發生錯誤,檢查「out」錯誤,但它永遠不會。我爲應用程序和服務器設置了保持活動狀態,我正在檢查out.checkError(),沒有任何內容可以檢測到持續的連接。
無論是否保持活力,都會發生同樣的事情。
創建套接字(發生在一個線程):Java/Android Dead Connection未被檢測到

  Socket socket = new Socket(serverAddr, port); 
      socket.setKeepAlive(true); 

心跳系統(也螺紋):

public void heartbeat(){ 
    new Thread(new Runnable() { 
     public void run() { 
      while(connected == true){ 
       try{ 
        Thread.sleep(120000); 
       }catch (Exception e){ 
       } 
       handlerObject.sendMessage(String.valueOf((char) 1)); 
      } 
     } 
    }).start(); 
} 

發送消息被定義爲:

 public void sendMessage(String data){ 
      try { 
       PrintWriter out = new PrintWriter(socket.getOutputStream());//, true); 
       out.println(data + "\r\n"); 
       out.flush(); 
       if(out.checkError()) { 
        socket.close(); 
       } 
      }catch (Exception e){ 
       try{ 
        socket.close(); 
       } catch (Exception z){ 

      } 
     } 
    } 

回答

0

我可能是防火牆阻止服務器上的流量,請通過關閉服務器上的防火牆或添加適當的規則來檢查(因爲您沒有遇到任何錯誤,所以可能是防火牆阻止ing流量)

+0

不是。連接工作正常。它最終變得沒有響應,並且在應用程序端沒有錯誤。 – TheMoop456

0

這裏的解決方案是使用socket.setSoTimeout(毫秒);並讓服務器在此之前發送幾秒鐘的心跳。如果客戶端在此之前沒有收到心跳,它會超時。我現在可以捕獲該異常並重新連接。