Websocket.disconnect()方法抛出java.net.SocketException:套接字已关闭 [英] Websocket.disconnect() method throws java.net.SocketException: Socket closed

查看:102
本文介绍了Websocket.disconnect()方法抛出java.net.SocketException:套接字已关闭的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am using android-websockets library from codebutler in my project. But I ran into problem when I execute disconnect() method. Following is the code:

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): java.net.SocketException: Socket closed

05-11 17:58:19.873:W/System.err(29443):在libcore.io.Posix.recvfromBytes(本机方法)

05-11 17:58:19.873: W/System.err(29443): at 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): at 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.873: W/System.err(29443): at 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): at 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): at 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): at 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): at 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): at 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): at 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): at 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): at 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): at 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)

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

请帮助!!!!!

推荐答案

这是因为connect()方法的实现与connect()方法的实现中创建的线程不同步. codebutler/android-websockets 不具有商业品质.Disconnect()方法甚至无法执行关闭握手通过 RFC 6455 .

It is because the implementation of disconnect() method does not synchronize with the thread which is created in the implementation of connect() method. codebutler/android-websockets is not of commercial quality. The disconnect() method does not perform even the closing handshake which is required by RFC 6455.

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

Use another WebSocket library if you don't want to see the error.

这篇关于Websocket.disconnect()方法抛出java.net.SocketException:套接字已关闭的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆