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

时间:2014-09-12 06:42:39

标签: android mobile websocket

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

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

  

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

但我尝试使用以下网络套接字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();

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

请帮我解决这个问题。

2 个答案:

答案 0 :(得分:17)

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

更改以下行

mWebSocketClient = new WebSocketClient(uri){

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

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

  

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

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

Link to supported Websocket-Versions

答案 1 :(得分:2)

我发现了这个问题。

实际上Java提供的Web套接字jar文件存在问题。

而不是我用过的 Autobahn (Android特定网络套接字开源https://github.com/tavendo/AutobahnAndroid)。

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