Farhana Naaz Ansari
Farhana Naaz Ansari

Reputation: 7928

Send data via okHttp socket

I'm trying to connect with websocket and the test socket is working wss://echo.websocket.org with my code but my WebSocket is not working and getting failed but whenever I try with the browser it works.

My Android code

 // 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)

    }
}

This is how data is sending in web

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);
    };

but trying to send with key-value in android is getting failed.

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

enter image description here

Erorr showing in android

FAILURE Expected HTTP 101 response but was '426 No Sec-WebSocket-Protocols requested supported'

this is how data is sending through the browser.

autobahn.js socket.htlm

Upvotes: 4

Views: 2083

Answers (1)

Gregor Rant
Gregor Rant

Reputation: 386

It seems OkHttp does not support WAMP protocol. I'd suggest switching to Autobahn|Java or similar library.

Upvotes: 4

Related Questions