无法从android okhttp3连接到节点websocket

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法从android okhttp3连接到节点websocket相关的知识,希望对你有一定的参考价值。

我在expressJs上创建了一个节点服务器,并使用socket.io创建了一个websocket服务器。我用来创建服务器的代码是

io.sockets.on('connection', function (socket) {
    connections.push(socket);
    console.log('Connected: ' + connections.length + 'sockets connected');
    io.sockets.emit('connected', JSON.stringify({status: "online"}));

    socket.on('disconnect', function (data) {
        connections.splice(connections.indexOf(socket), 1);
        console.log('Disconnected: ' +  connections.length + ' sockets connected');
        io.sockets.emit('disconnected', {status: "offline"});
    });

    socket.on('request', function (data) {
        console.log('new request in server: ' + data.toString());
        io.sockets.emit('newRequest', JSON.stringify({request: data}));
    })
});

我可以从任何浏览器连接服务器,包括移动和模拟器浏览器,但我无法使用okhttp3 websocket连接。

我跟随https://gist.github.com/AliYusuf95/557af8be5f360c95fdf029795291eddb这个要点来创建客户端。但我没有连接websocket。我收到以下错误D/OkHttp: <-- HTTP FAILED: java.io.IOException: unexpected end of stream on Connection{192.***.0.***:3000, proxy=DIRECT@ hostAddress=/192.***.0.***:3000:3000 cipherSuite=none protocol=http/1.1}

出了什么问题?

答案

尝试以下...看看是否有效。

 private void connectWebSocket() {
  URI uri;
  try {
    uri = new URI("ws://websockethost:8080");
  } catch (URISyntaxException e) {
    e.printStackTrace();
    return;
  }

  mWebSocketClient = new WebSocketClient(uri) {
    @Override
    public void onOpen(ServerHandshake serverHandshake) {
      Log.i("Websocket", "Opened");
      mWebSocketClient.send("Hello from " + Build.MANUFACTURER + " " + Build.MODEL);
    }

    @Override
    public void onMessage(String s) {
      final String message = s;
      runOnUiThread(new Runnable() {
        @Override
        public void run() {
          TextView textView = (TextView)findViewById(R.id.messages);
          textView.setText(textView.getText() + "
" + message);
        }
      });
    }

    @Override
    public void onClose(int i, String s, boolean b) {
      Log.i("Websocket", "Closed " + s);
    }

    @Override
    public void onError(Exception e) {
      Log.i("Websocket", "Error " + e.getMessage());
    }
  };
  mWebSocketClient.connect();
}

Source

以上是关于无法从android okhttp3连接到节点websocket的主要内容,如果未能解决你的问题,请参考以下文章

离线 Android 仅使用 USB 电缆连接到 PHP localhost

无法从节点连接到 docker 中的 mongo 副本集

无法从另一台机器连接到 Geth 节点 RPC

无法使用 sequelize 从本地节点应用程序连接到 heroku postgresql 数据库

无法通过代理连接到 websocket

节点服务器无法连接到 postgres db