android - Android 客户端的 Web 套接字连接失败

标签 android mobile websocket

我正在为服务器开发一个 Android 客户端,该客户端要求持续将音频流交换到基于 WebSockets 的服务器。

当与 web 套接字连接时,android 客户端抛出以下错误。

Closed draft org.java_websocket.drafts.Draft_10@b2fe9b40 refuses handshake

但我尝试使用以下网络套接字 uri。连接成功。 ws://echo.websocket.org

Code:

URI uri;
    try {
        // uri = new URI(
        // "ws://echo.websocket.org");
        uri = new URI(
                "ws://serverIP:9090/WebRtc/serverendpoint");

    } 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() + "\n" + 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();

我尝试从浏览器对我使用过的网络套接字(ws://serverIP:9090/WebRtc/serverendpoint)进行回显测试。它正在正确连接。 但是当我从移动设备或模拟器上尝试时,没有任何效果。

请帮我解决这个问题。

最佳答案

我只是找到了另一种简单的方法来解决这个问题。

改变下一行

mWebSocketClient = new WebSocketClient(uri){

mWebSocketClient = new WebSocketClient(uri, new Draft_17()){

我在我的服务器日志中发现了提示:

User Agent: [unset] requested WebSocket version [8], Jetty supports version: [13]

正如您在下面的链接中看到的,版本 8 是 Draft_10,版本 13 是 Draft_17。

Link to supported Websocket-Versions

关于android - Android 客户端的 Web 套接字连接失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25802290/

相关文章:

java - 列表 fragment 中的项目没有改变颜色

java - 网址格式错误异常

javascript - QtQuick2 - 自定义消息框

java - 为每个连接的客户端单独的 websocket

android - 如果回收器 View 项中的数据为空,则不显示 View 持有者

java - 如何将一个android studio项目合并到另一个android studio项目中

html - 如何允许在 iOS 上上传 PDF 文件?

mobile - Jolla 的 Sailfish OS 上的移动应用程序开发技术堆栈是什么样的?

node.js - WebSocket/Socket.IO 服务器的一个很好的解决方案(我试过 Nginx、Node 等)

python - 循环似乎打破了命名空间方法中的 "emit"事件 [gevent-socketio]