Отправлять данные через сокет okHttp

Я пытаюсь подключиться к websocket, и тестовый сокет работает wss://echo.websocket.org с моим кодом, но мой WebSocket не работает и дает сбой, но всякий раз, когда я пытаюсь использовать браузер, он работает.

Мой код для Android

 // val request: Request = Request.Builder().url("wss://echo.websocket.org").build()
    val request: Request = Request.Builder().url("wss://dev.xyz.co.uk/xyz").build()
    val listener: EchoWebSocketListener = EchoWebSocketListener()
    val ws: WebSocket = client.newWebSocket(request, listener)
    client.dispatcher().executorService() 

 private inner class EchoWebSocketListener : WebSocketListener() {
        private var NORMAL_CLOSURE_STATUS: Int = 1000

    override fun onOpen(webSocket: WebSocket, response: Response) {
        Log.d("onOpen-----", "Socket connected!!!!!")
        webSocket.send("[5, \"driver106apikey\"]");
        webSocket.close(NORMAL_CLOSURE_STATUS,"GoodBye!!")
    }
    override fun onMessage(webSocket: WebSocket, text: String) {
        Log.d("onMessage-----", "Socket connected!!!!!")
        Log.d("onMessage String-----", text)
        output("Receiving------ "+ text)
    }
    override fun onMessage(webSocket: WebSocket, bytes: ByteString) {
        Log.d("onMessage-----", "Socket onmessage!!!!!")
        output("Receiving------ "+ bytes.toString())
    }

    override fun onClosing(webSocket: WebSocket, code: Int, reason: String) {
        Log.d("onClosing-----", "Socket closing!!!!!")
        webSocket.close(NORMAL_CLOSURE_STATUS, null)
        output("Closing : "+ code + "/" + reason)
    }

    override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) {
        Log.d("onFailure-----", "FAILURE")
        Log.d("onFailure-----", t.message)

    }
}

Вот как данные отправляются в Интернете

1. When you send data you send in this format : 
    function clickBtn() {
        var data = {
            event: 0,
            data: {
                lat: 123.2123,
                lng: 22.5543,
                status: 1
            }
        }

        conn.publish('driver106apikey', data);
    };

но попытка отправки с ключом-значением в Android не удалась.

 val formBody: RequestBody = FormBody.Builder()
            .add("driver106apikey", "{
                "event": 0,
                "data": {
                    "lat": 123.2123,
                    "lng": 22.5543,
                    "status": 1
                }
            }")
            .build()

введите описание изображения здесь

Erorr отображается в android

ОТКАЗ Ожидается ответ HTTP 101, но было «426 Запрошенные протоколы Sec-WebSocket не поддерживаются»

так данные отправляются через браузер.

autobahn.js socket.htlm


person Farhana Naaz Ansari    schedule 07.09.2020    source источник


Ответы (1)


Похоже, OkHttp не поддерживает протокол WAMP. Я бы посоветовал перейти на Autobahn | Java или аналогичную библиотеку.

person Gregor Rant    schedule 15.09.2020
comment
хорошо, я пробовал с 'crossbario', но ничего не получается - person Farhana Naaz Ansari; 15.09.2020
comment
вы должны показать, что ничего не происходило - person vitalyster; 16.09.2020
comment
Autobahn использует CompletableFuture, что исключает работу на устройствах ниже Oreo. Жалко, что они согласились с этим решением. Он очень ориентирован на Java 8. Было бы здорово, если бы у них была совместимая версия, а также возможность использовать Wamp v1 или v2. - person Conti; 28.11.2020