qq_33171970
桐小目
2017-02-12 10:29

autobahn android使用WebSocket 报错

20
  • autobahn
  • websocket
  • android

我在做一个Android项目中用到了websocket,使用了autobahn-android.jar包,但是在建立连接之后报了错误。

 D/de.tavendo.autobahn.WebSocketReader: run() : WebSocketException (de.tavendo.autobahn.WebSocketException: RSV != 0 and no extension negotiated)
 D/de.tavendo.autobahn.WebSocketReader: ended
 D/de.tavendo.autobahn.WebSocketConnection: opening handshake received
 D/de.tavendo.autobahn.WebSocketConnection: fail connection [code = 4, reason = WebSockets protocol violation

我查看了错误地点并且看了源码,错误发生在WebSocketReader的processData处,源码为:

 if (mFrameHeader == null) {

         // need at least 2 bytes from WS frame header to start processing
         if (mFrameBuffer.position() >= 2) {

            byte b0 = mFrameBuffer.get(0);
            boolean fin = (b0 & 0x80) != 0;
            int rsv = (b0 & 0x70) >> 4;
            int opcode = b0 & 0x0f;

            byte b1 = mFrameBuffer.get(1);
            boolean masked = (b1 & 0x80) != 0;
            int payload_len1 = b1 & 0x7f;

            // now check protocol compliance

            if (rsv != 0) {
               throw new WebSocketException("RSV != 0 and no extension negotiated");
            }
                        ...(省略)
背景:
        服务端我使用了Spring+SpringMVC+Hibernate框架,并且搭建了WebSocket的服务端,在Web版本使用JavaScript连接WebSocket正常,地址保证没有任何问题。

探索:
遇到这个问题之后我百度&Google了很久,发现有GitHub和StackOverflow不少人提出来这个问题,但都没有得到有效解决,看了半天感觉靠谱的回答说是autobahn支持websocket版本的问题,,但是并没有给出行之有效的解决方法。我使用的WebSocket是Java7及以上自带的javax.websocket里面的方法,也没有具体的版本说明,希望做过或者了解的大神能够解答一下疑惑。是因为版本的问题么?如果是应该使用什么版本的WebSocket?如果不是,是因为什么原因导致的,应该如何解决呢?
先感谢阅读。

  • 点赞
  • 回答
  • 收藏
  • 复制链接分享

1条回答