Не удалось подключиться к веб-разъему с Android-клиента

Я разрабатываю клиент Android для сервера, где требование - непрерывный обмен аудиопотоком на сервер на основе WebSockets.

При подключении к веб-сокетам клиент android вызывает следующую ошибку.

Закрытый проект [email protected] отказывается квитирование

Но я пробовал использовать следующий url для веб-сокетов. Соединение получилось успешным. 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();

Я попробовал тест эха из браузера для веб-сокета (ws://serverIP: 9090/WebRtc/serverendpoint), который я использовал. Он правильно подключается. Но когда я пытаюсь сделать это как с мобильного, так и с эмулятора, ничего не работает.

Пожалуйста, помогите мне в этом.

Ответ 1

Я нашел проблему с этим.

На самом деле проблема с Java предоставлена ​​jar файлом веб-сокета.

Вместо этого я использовал Autobahn (Android Specific Web Socket с открытым исходным кодом https://github.com/tavendo/AutobahnAndroid).

Теперь я могу подключиться к серверу веб-сокетов.

Ответ 2

Я просто нашел еще один простой способ избавиться от этой проблемы.

Изменить следующую строку

mWebSocketClient = new WebSocketClient(uri){

к

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

Я нашел подсказку в своих Serverlogs, в которой говорилось:

Пользовательский агент: [unset] запросил версию WebSocket [8], Jetty поддерживает версию: [13]

Как вы можете видеть в приведенной ниже ссылке, версия 8 является Draft_10, версия 13 - Draft_17.

Ссылка на поддерживаемые версии Websocket