通过okHttp套接字发送数据

时间:2020-09-07 11:49:01

标签: android websocket okhttp java-websocket

我正在尝试与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()

enter image description here

Errrr在Android中显示

FAILURE预期的HTTP 101响应,但为'426否 Sec-WebSocket-Protocols请求支持'

这是通过浏览器发送数据的方式。

autobahn.js socket.htlm

1 个答案:

答案 0 :(得分:3)

似乎OkHttp不支持WAMP协议。我建议切换到Autobahn|Java或类似的库。