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

M V*_*esh 12 mobile android websocket

我正在为服务器开发一个Android客户端,其中要求是将音频流连续交换到基于WebSockets的服务器.

与Web套接字连接时,Android客户端抛出以下错误.

封闭的草案org.java_websocket.drafts.Draft_10@b2fe9b40拒绝握手

但我尝试使用以下web插座uri.连接成功.WS://echo.websocket.org

代码:

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();
Run Code Online (Sandbox Code Playgroud)

我尝试了浏览器的echo测试,用于我使用的Web套接字(ws:// serverIP:9090/WebRtc/serverendpoint).它正在正确连接.但是,当我从手机或模拟器尝试时,没有任何作用.

请帮帮我.

Alb*_*tNf 18

我刚刚找到另一种简单的方法来摆脱这个问题.

改变以下行

mWebSocketClient = new WebSocketClient(uri){
Run Code Online (Sandbox Code Playgroud)

mWebSocketClient = new WebSocketClient(uri, new Draft_17()){
Run Code Online (Sandbox Code Playgroud)

我在我的Serverlogs中找到了提示:

用户代理:[unset]请求WebSocket版本[8],Jetty支持版本:[13]

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

链接到支持的Websocket-Versions


M V*_*esh 2

我发现了这个问题。

实际上是Java提供的web socket jar文件的问题。

相反,我使用了 Autobahn(Android 特定 Web 套接字开源https://github.com/tavendo/AutobahnAndroid)。

现在可以连接到 Web 套接字服务器了。