【问题标题】:Websocket.disconnect() method throws java.net.SocketException: Socket closedWebsocket.disconnect() 方法抛出 java.net.SocketException: Socket closed
【发布时间】:2015-07-22 22:08:20
【问题描述】:

我在我的项目中使用来自 codebutler 的 android-websockets 库。但是当我执行disconnect() 方法时遇到了问题。以下是代码:

public void disconnectServer()
{
    if(client != null)
    {
        try {

            if(client.isConnected())
            {
                client.disconnect();

            }

        } catch (Exception e) {

            e.printStackTrace();
        }

    }
}

我得到以下异常:

05-11 17:58:19.873: W/System.err(29443): java.net.SocketException: 套接字关闭

05-11 17:58:19.873: W/System.err(29443): 在 libcore.io.Posix.recvfromBytes(Native Method)

05-11 17:58:19.873: W/System.err(29443): 在 libcore.io.Posix.recvfrom(Posix.java:161)

05-11 17:58:19.873: W/System.err(29443): 在 libcore.io.BlockGuardOs.recvfrom(BlockGuardOs.java:250)

05-11 17:58:19.878: W/System.err(29443): 在 libcore.io.IoBridge.recvfrom(IoBridge.java:553)

05-11 17:58:19.878: W/System.err(29443): 在 java.net.PlainSocketImpl.read(PlainSocketImpl.java:485)

05-11 17:58:19.878: W/System.err(29443): 在 java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:37)

05-11 17:58:19.878: W/System.err(29443): 在 java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:237)

05-11 17:58:19.878: W/System.err(29443): 在 libcore.io.Streams.readSingleByte(Streams.java:41)

05-11 17:58:19.878: W/System.err(29443): 在 java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:233)

05-11 17:58:19.878: W/System.err(29443): 在 java.io.DataInputStream.readByte(DataInputStream.java:75)

05-11 17:58:19.878: W/System.err(29443): 在 com.codebutler.android_websockets.HybiParser.start(HybiParser.java:120)

05-11 17:58:19.878: W/System.err(29443): 在 com.codebutler.android_websockets.WebSocketClient$1.run(WebSocketClient.java:145)

05-11 17:58:19.878: W/System.err(29443): 在 java.lang.Thread.run(Thread.java:818)

请帮忙!!!!!!

【问题讨论】:

    标签: android websocket


    【解决方案1】:

    这是因为disconnect()方法的实现与connect()方法的实现中创建的线程不同步。 codebutler/android-websockets 不具备商业品质。 disconnect() 方法甚至不执行 closing handshake 所需的 RFC 6455

    如果您不想看到错误,请使用另一个 WebSocket 库。

    【讨论】:

    • 感谢您的快速回复。你能推荐任何用于商业用途的图书馆吗?我曾尝试使用两个库,即 java_websocket 和 codebutler/android-websockets,但它给我带来了问题。除了我上面提到的问题之外,我还面临一个严重的套接字断开问题。如果我让它闲置一段时间,我不知道为什么它会断开连接。当我尝试在我的项目中调用任何 APU 时,我得到 NotYetConnectedException。你能推荐我任何可以用于商业用途的图书馆吗?
    • 试试 nv-websocket-client (Blog)。要保持连接,您需要定期发送Ping(或未经请求的Pong)。 nv-websocket-client 提供了 WebSocket.setPingInterval 方法来很容易地做到这一点。详情请见JavaDoc
    猜你喜欢
    • 2019-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    相关资源
    最近更新 更多