android - 通过 okHttp 套接字发送数据

标签 android websocket okhttp java-websocket

我正在尝试连接 websocket并且测试套接字正在工作wss://echo.websocket.org使用我的代码,但我的 WebSocket 无法正常工作并且失败,但每当我尝试使用浏览器时,它都可以工作。
我的安卓代码

 // 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
在android中显示错误

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


这就是通过浏览器发送数据的方式。
autobahn.js
socket.htlm

最佳答案

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

关于android - 通过 okHttp 套接字发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63777035/

相关文章:

tomcat - primefaces 推送在使用 AWS Tomcat7 的 Safari 中不起作用

java - kotlin com.google.gson.JsonSyntaxException : java. lang.IllegalStateException:预期为 BEGIN_OBJECT,但在第 1 行第 2 列路径 $ 处为 BEGIN_ARRAY

php - 如何使用 symfony Ratchet 向特定的 websocket 客户端发送消息?

java - AdView 减慢整个应用程序,可能的原因

java - 以编程方式设置 Android 样式

java - Android:如何使按钮的边距相对于屏幕宽度?

c# - 如何使用 WebSocket 执行自定义证书验证

java - 通过改造上传大型 Base64 编码文件的正确方法是什么?

java - 无法为 ConfigCat 创建新的客户端实例 (configcat-java-client-6.0.1)

android - Cordova 的启动画面