2015-05-12 3 views
0

Я использую библиотеку android-websockets из кода в моем проекте. Но я столкнулся с проблемой при выполнении метода disconnect(). Ниже приведен код:Websocket.disconnect() метод throws java.net.SocketException: Socket closed

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: Вт/System.err (29443): в libcore.io.Posix.recvfromBytes (Родной метод)

05-11 17: 58: 19.873: W /System.err (29443): по адресу libcore.io.Posix.recvfrom (Posix.java:161)

05-11 17: 58: 19,873: Вт/System.err (29443): в libcore.io.BlockGuardOs.recvfrom (BlockGuardOs.java : 250)

05-11 17: 58: 19,878: Вт/System.err (29443): в libcore.io.IoBridge.recvfrom (IoBridge.java:553)

05-11 17: 58: 19,878: Вт/System.err (29443): в java.net.PlainSocketImpl.read (PlainSocketImpl.java:485)

05-11 17: 58: 19,878: Вт/System.err (29443) : по адресу java.net.PlainSocketImpl.access $ 000 (PlainSocketImpl.java:37)

05-11 17: 58: 19,878: Вт/System.err (29443): в java.net.PlainSocketImpl $ PlainSocketInputStream.read (PlainSocketImpl .java: 237)

05-11 17: 58: 19,878: Вт/System.err (29443): в libcore.io.Streams.readSingleByte (Streams.java:41)

05-11 17: 58: 19,878: Вт/System.err (29443): в java.net.PlainSocketImpl $ PlainSocketInputStream.read (PlainSocketImpl.java:233)

05-11 17: 58: 1 9,878 W/System.err (29443): в java.io.DataInputStream.readByte (DataInputStream.java:75)

05-11 17: 58: 19,878: Вт/System.err (29443): в com.codebutler.android_websockets.HybiParser.start (HybiParser.java:120)

05-11 17: 58: 19,878: Вт/System.err (29443): в com.codebutler.android_websockets.WebSocketClient $ 1. пробег (WebSocketClient.java:145)

05-11 17: 58: 19,878: Вт/System.err (29443): в java.lang.Thread.run (Thread.java:818)

Пожалуйста, помогите !!!!!

ответ

0

Это связано с тем, что реализация метода disconnect() не синхронизируется с потоком, который создается в реализации метода connect(). codebutler/android-websockets не имеет коммерческого качества. Метод disconnect() не выполняет даже closing handshake, который требуется RFC 6455.

Используйте другую библиотеку WebSocket, если вы не хотите видеть эту ошибку.

+0

Спасибо за такой быстрый ответ. Можете ли вы предложить любую библиотеку для коммерческого использования? Я попытался использовать две библиотеки, а именно: java_websocket & codebutler/android-websockets, но это дает мне проблемы. Помимо проблемы, о которой я говорил выше, у меня возникла серьезная проблема разъединения разъемов. Я не знаю, почему он отключается, если я когда-нибудь простоял. Я получаю NotYetConnectedException, когда пытаюсь вызвать любое APU в моем проекте. Можете ли вы предложить мне любую библиотеку, которая может быть использована для коммерческого использования? –

+0

Попробуйте ** [nv-websocket-client] (https://github.com/TakahikoKawasaki/nv-websocket-client) ** ([Блог] (http://darutk-oboegaki.blogspot.jp/2015/05) /websocket-client-library-java-se-15.html)). Чтобы сохранить соединение, вам необходимо отправить [Ping] (https://tools.ietf.org/html/rfc6455#section-5.5.2) (или незапрашиваемый [Pong] (https://tools.ietf.org/ html/rfc6455 # section-5.5.3)). 'nv-websocket-client' предоставляет метод' WebSocket.setPingInterval', чтобы сделать это очень легко. Подробнее см. В [JavaDoc] (http://takahikokawasaki.github.io/nv-websocket-client/). –

Смежные вопросы