HarmonyOS 鸿蒙Next中webSocket连接失败
HarmonyOS 鸿蒙Next中webSocket连接失败 Android项目中使用okhttp的websocket通信,代码如下,主要就是有3个header参数。
fun initSocketConnect(mListener: WebSocketListener): WebSocket {
val currentTime = System.currentTimeMillis()
val lastLeaveTime = MMKVUtil.decodeLong(CHAT_DESTROY_TIME)
val httpClient = OkHttpClient().newBuilder()
.writeTimeout(5, TimeUnit.SECONDS)
.readTimeout(5, TimeUnit.SECONDS)
.connectTimeout(5, TimeUnit.SECONDS)
.build()
val request = Request.Builder().url(HttpUrlUtil.BASE_SOCKET_URL)
.addHeader("X-Access-Token", UserUtil.getUserInfo()?.token ?: "-1")
.addHeader("isVIP", AppUtil.isWifiProxy())
.addHeader("enterTime", (currentTime - lastLeaveTime).toString())
return httpClient.newWebSocket(request.build(), mListener)
}
写ArkTs的时候使用webSocket组件访问同样的网络,代码如下,connect方法返回true,但是马上就会回调ws.on(‘error’,(err) => {})这里,对应的err信息是:on error, error:{“code”:200,“data”:“502”}。
private ws: webSocket.WebSocket | null = null
this.ws = webSocket.createWebSocket()
this.ws.on('open', (err, value) => {
LogUtil.warn("on open, status:" + JSON.stringify(value));
});
this.ws.on('message', (err, value) => {
LogUtil.warn("on message, message:" + value);
});
this.ws.on('close', (err, value) => {
LogUtil.warn("on close, code is " + value.code + ", reason is " + value.reason);
});
this.ws.on('error', (err) => {
LogUtil.warn("on error, error:" + JSON.stringify(err));
});
const token = UserUtil.getToken()
let socketHeader: Record<string, Object> = {
"isVIP": "8096",
"X-Access-Token": token,
"enterTime": "1200000",
}
let options: webSocket.WebSocketRequestOptions = {
header: socketHeader,
skipServerCertVerification: true
}
this.ws?.connect(
HttpUrlConstants.BASE_SOCKET_URL,
options,
(err, value) => {
LogUtil.warn("Connected Result.value=" + JSON.stringify(value) + "-----err=" + err);
}
)
还有就是不管我传不传options这个参数,都会立马回调’error’这里,感觉好像是options的header参数没有生效,有没有大佬知道这个是啥情况
更多关于HarmonyOS 鸿蒙Next中webSocket连接失败的实战教程也可以访问 https://www.itying.com/category-93-b0.html
connect成功之后(返回结果是true),没有收到open和message事件的回调,而是立马回调error事件
开发者您好,目前需要提供完整tcpdump+hilog日志进行分析,您可参考以下步骤获取日志上传到新楼层:
获取日志步骤
步骤一:先清理日志
1.hdc shell
2.cd data/log/hilog
3.hilog -w clear (清除多余日志)
4.exit 退回到目录
5.判断是否是log版本:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/hilog#查看log版本信息
如果是log版本参考步骤二,如果不是参考步骤三。
步骤二:log版本带有betaClub,可以使用如下方式抓取tcpdump+hilog:
一、登录betaClub
二、手机里面的实用工具里面有个betaclub工具,在BetaClub应用里打开TCP dump日志开关,打开日志开关路径:BetaClub->我的->系统设置->TCP dump日志开关。
三、复现问题
四、使用命令hdc file recv /data/log/tcpdump 本地路径,可以抓出tcpdump。
五、使用命令hdc file recv /data/log/hilog 导出hilog
六、提供问题复现时间点
步骤三:采用工具获取tcpdump包:
工具链接:https://developer.huawei.com/consumer/cn/doc/architecture-guides/tools-v1_2-ts_360-0000002510878920
抓出tcpdump后
使用命令hdc file recv /data/log/hilog 导出hilog
200 连接失败
错误信息
WebSocket connect failed.
错误描述
WebSocket连接失败。
可能原因
- 服务器拒绝客户端连接、协议出现问题导致握手失败或证书验证失败。
- 客户端或服务端断开连接时无状态码。
处理步骤
检查协议是否有效、证书校验是否通过,重新连接。
你参数类型对吗 为啥直接返回502
参数类型应该没有错误,都是string类型的
那你们这个502是啥意思,
header中X-Access-Token这个参数,如果过期了或者不是合法的都会报502,所以我感觉好像header中传递的参数服务器没有收到。
鸿蒙Next中WebSocket连接失败可能由网络权限、证书配置或服务端兼容性导致。检查应用是否已申请ohos.permission.INTERNET网络权限,并在module.json5中配置。若使用wss协议,需确认证书有效且服务端支持TLS协议。注意鸿蒙Next的WebSocket API基于ArkTS/ArkUI,需使用标准接口如WebSocket()创建连接,并确保URL格式正确(如ws://或wss://)。可排查防火墙或代理设置,同时验证服务端是否正常运行。


