如何检查WebSocket是否已连接

4

我使用KOUSH库创建了一个Websocket服务类,https://github.com/koush/AndroidAsync#can-also-create-web-sockets

现在我想要从我的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();
            }
        });
    }
});

尝试使用它并捕获异常。这会告诉你它是否连接。其他任何事情都是试图预测未来。当你测试时它可能是正常的,但当你使用时它可能会出现问题。那有什么用呢? - user207421
2个回答

0
你可以像这样做:
if (mWebSocketClient.isOpen) {
         mWebSocketClient.send(jObj.toString())
} else {
   try {
         client.connectWebSocket(p0)
         mWebSocketClient.send(jObj.toString())
   } catch (e : Exception){
        Toast.makeText(p0, "not connected $e", Toast.LENGTH_LONG).show()
   }
}

-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();


isClosed()并不能告诉你对等方是否已断开连接。此代码将写入一个字符串和10个字节的垃圾数据。对等方必须准备好接收它。 - user207421

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接