有一段js代码:
token = 'some_data';
sid = 'some_data';
ws = new WebSocket('some_data' + sid + '/');
ws.onmessage = function(resp){console.log(resp)};
ws.send(JSON.stringify({'token':token}));
ws.send(JSON.stringify({'chat':{'a':'init', 'rtc_supported': false}}));
ws.send(JSON.stringify({'chat':{'a':'send', 'to': '03654ps', 'body':'preved', 'stamp': 0}}));
我正在尝试通过 okHttp 连接到服务器:
val loggingInterceptor: HttpLoggingInterceptor = HttpLoggingInterceptor()
.setLevel(HttpLoggingInterceptor.Level.BODY)
val client = OkHttpClient.Builder()
.connectTimeout(60, TimeUnit.SECONDS)
.writeTimeout(300, TimeUnit.SECONDS)
.addInterceptor(loggingInterceptor)
.readTimeout(60, TimeUnit.SECONDS)
.build()
val json = "application/json; charset=utf-8".toMediaTypeOrNull()
val params: MutableMap<String, String> = HashMap()
params["token"] = getSharedPreferences("app_data", 0).getString("access_token", "")!!
val parameter = JSONObject(params as Map<*, *>)
val body: RequestBody = parameter.toString().toRequestBody(json)
val request = Request.Builder()
.url(CHAT_URL)
.post(body)
.build()
val webSocket = client.newWebSocket(request, EchoWebSocketListener())
client.dispatcher.executorService.shutdown()
如果我理解正确,那么没有令牌,我的服务器将不会返回任何内容。我添加了一个令牌,您可以从请求正文中的代码中理解:
val json = "application/json; charset=utf-8".toMediaTypeOrNull()
val params: MutableMap<String, String> = HashMap()
params["token"] = getSharedPreferences("app_data", 0).getString("access_token", "")!!
val parameter = JSONObject(params as Map<*, *>)
val body: RequestBody = parameter.toString().toRequestBody(json)
但是如果我这样做,我会得到这个错误:
java.lang.IllegalArgumentException: Request must be GET: POST
要么这些事情根本不是那样做的,要么我做错了什么。服务器地址本身如下所示:
wss://test_server.net:4433/ws/jwt/jfagdod
我不知道我哪里出了问题以及如何解决它。
试试这样:
您创建一个 websocket。连接已建立并且不会中断,直到有人(您或服务器)出现错误或正常中断它。将明文发送到其中,直到您感到无聊为止。如果服务器是健谈的,您还可以分别从中获取相应回调中的明文数据。