HarmonyOS 鸿蒙Next TCP Socket 连接自动断开

发布于 1周前 作者 songsunli 最后一次编辑是 5天前 来自 鸿蒙OS

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));
          });
        }
      })
	  ```
8 回复

你可以自己在本地开启一个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。在那里,你可以获得更专业的技术支持和解决方案。

回到顶部