HarmonyOS 鸿蒙Next TCP Socket 连接自动断开
HarmonyOS 鸿蒙Next TCP Socket 连接自动断开
我按照开发文档写了tcp socket 连接,客户端打印的情况都是成功的,bind成功,connect成功,send成功。但是监听不到message应答数据。我让服务器的同事帮忙查询,发现我的连接刚创建完成就立即断开了,只经过了20ms,所以根本没有收到请求消息。但是客户端没有监听到连接断开,发送请求也是成功的。麻烦问下是什么问题呢?(我们服务器端用的是C++)
this.tcpSocket = socket.constructTCPSocketInstance();
// 应答监听
this.tcpSocket.on(SocketEventType.MESSAGE, value => {
console.log("on message")
});
//连接监听
this.tcpSocket.on(SocketEventType.CONNECT, () => {
console.log("on connect")
});
//关闭监听
this.tcpSocket.on(SocketEventType.CLOSE, () => {
console.log("on close")
this.isConnect = false
});
//错误监听
this.tcpSocket.on(SocketEventType.ERROR,err =>{
console.log("on error " + err)
})
//绑定
this.tcpSocket.bind({ address: '0.0.0.0' }, err => {
if (err) {
console.log('bind fail ' + JSON.stringify(err));
this.isBind = false;
return;
} else {
console.log('bind success');
this.isBind = true;
//连接
let promise = this.tcpSocket.connect({ address: {address: this.ip, port: this.port, family: 1} , timeout: 60000});
promise.then(() => {
console.log('connect success')
this.isConnect = true
//设置参数
this.tcpSocket.setExtraOptions({
keepAlive: true,
receiveBufferSize: this.BUFFER_SIZE,
OOBInline: true,
TCPNoDelay: true,
socketLinger: { on:true, linger:65535 },
reuseAddress: true,
socketTimeout: 60000,
}).then(() => {
console.log('setExtraOptions success');
this.sendRequest('test message')
}).catch(err => {
console.log('setExtraOptions fail ' + JSON.stringify(err));
});
}).catch(err => {
console.log('connect fail ' + JSON.stringify(err));
});
}
})
```
你可以自己在本地开启一个WebSocket服务,然后用你的代码连接一下
type=1400 audit(0.0:49073): avc: denied { read } for laddr=10.0.2.15 lport=40043 faddr=10.10.10.247 fport=8281 scontext=u:r:ohco_containerd:s0 tcontext=u:r:ohco_containerd:s0 tclass=tcp_socket permissive=1
我在log中看到这样一条信息,一直在循环,不知道是否和socket闪断的情况有关系呢?
添加一下错误监听,看看有没有信息输出
是有写监听error的代码(可以看我贴的代码//错误监听),并没有打印信息,我使用了真机和模拟器,都是一样的
有了新的发现,我创建完连接后,大约两分钟后,有时能收到error的监听信息。code:104。这是什么错误码?并没有查询到呢?
请问找到原因了吗,我也有类似问题
针对HarmonyOS 鸿蒙Next TCP Socket连接自动断开的问题,这通常可能由多种因素导致。在网络不稳定的情况下,建议实现连接断开的监听器,及时检测到连接断开的情况,并进行相应处理,如重新连接。同时,也需检查Socket的接收缓冲区大小是否合适,及时读取缓冲区数据以避免数据截断导致连接异常。
此外,还应确认TCP连接的相关参数设置,如keepAlive、TCPNoDelay等,确保这些参数符合业务需求。若连接过程中存在错误,需仔细查看错误日志,定位问题原因。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。在那里,你可以获得更专业的技术支持和解决方案。