2015-04-15 112 views
3

我使用KOUSH庫https://github.com/koush/AndroidAsync#can-also-create-web-sockets如何檢查是否WebSocket的連接

現在我要檢查的WebSocket是從我mainActivity連接到我的服務器上創建一個WebSocket的服務類。你知道我可以檢查嗎? 感謝

AsyncHttpClient.getDefaultInstance().websocket(get, "my-protocol", new WebSocketConnectCallback() { 
    @Override 
    public void onCompleted(Exception ex, WebSocket webSocket) { 
     if (ex != null) { 
      ex.printStackTrace(); 
      return; 
     } 
     webSocket.send("a string"); 
     webSocket.send(new byte[10]); 
     webSocket.setStringCallback(new StringCallback() { 
      public void onStringAvailable(String s) { 
       System.out.println("I got a string: " + s); 
      } 
     }); 
     webSocket.setDataCallback(new DataCallback() { 
      public void onDataAvailable(ByteBufferList byteBufferList) { 
       System.out.println("I got some bytes!"); 
       // note that this data has been read 
       byteBufferList.recycle(); 
      } 
     }); 
    } 
}); 
+0

只要嘗試使用它並捕獲異常。這告訴你它是否連接。其他任何事情都在試圖預測未來。當你去使用它時,它可能會在測試時出現故障。那有什麼用處? – EJP

回答

-1

的解決方案是保存這個功能到本地的WebSocket變量的結果,然後檢查其狀態:

WebSocket webSocket=null; 
try { 
    webSocket=AsyncHttpClient.getDefaultInstance().websocket(get, "my-protocol", new WebSocketConnectCallback() { 
     @Override 
     public void onCompleted(Exception ex, WebSocket webSocket) { 
      if (ex != null) { 
       ex.printStackTrace(); 
       return; 
      } 
      webSocket.send("a string"); 
      webSocket.send(new byte[10]); 
      webSocket.setStringCallback(new StringCallback() { 
       public void onStringAvailable(String s) { 
        System.out.println("I got a string: " + s); 
       } 
      }); 
      webSocket.setDataCallback(new DataCallback() { 
       public void onDataAvailable(ByteBufferList byteBufferList) { 
        System.out.println("I got some bytes!"); 
        // note that this data has been read 
        byteBufferList.recycle(); 
       } 
      }); 
     } 
    }).get(); 
}catch(InterruptedException e){ 
//handle exception 
}catch(ExecutionException e){ 
//handle exception 
} 

if(websocket!=null && websocket.isOpen()){ 
//websocket is working fine 
} 

您可以使用其他之類的語句websocket.isClosed() ;

+0

'isClosed()'不會告訴您對等體是否已斷開連接。該代碼寫入一個字符串和10個字節的垃圾。同行必須準備好接受這一點。 – EJP