2015-04-15 109 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