• Lv0
    粉丝0

积分0 / 贡献0

提问1答案被采纳0文章0

作者动态

    TCP连接自动销毁异常

    MAK丶E 显示全部楼层 发表于 前天 18:05

    hap创建TCP服务,端口不能正常复用

    1. 应用里使用socket.constructTCPSocketServerInstance()创建TCPServer实例,使用listen监听指定IP的对应端口,我这里监听的192.168.2.251:8222。使用conect触发连接回调

      // tcp连接测试
        tcpConnect(){
          let tcp:socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
          let listenAddress: socket.NetAddress = {
            port: 8222,
            address: "192.168.2.251"
          }
          // 开启监听服务
          tcp.listen(listenAddress, (err:BusinessError)=>{
            if(err){
              console.log("[console] tcp listen fail");
              return;
            }
            console.log("[console] tcp listen success");
            tcp.on("error",(err:BusinessError)=>{
              console.log("[console] tcp listen error:",err.message);
            })
            tcp.on("connect",(client:socket.TCPSocketConnection)=>{
              console.log("[console] tcp connect ->",client.clientId);
              client.on("message",(data)=>{
                console.log("[console] tcp client message:",data.message)
              })
              client.on("close",()=>{
                console.log("[console] tcp client close");
              })
            })
          })
        }
    2. 运行调用这个方法设备会创建8222端口监听实例,并且这时是没有连接实例创建的,可通过netstat命令获取到:

      image.png

    3. 如果这个时候使用任意TCP工具连接该鸿蒙设备的8222端口可以发现设备会创建连接实例: image.png

    4. 但如果这时强行关闭hap应用会发现虽然8222的监听不见了,但连接实例会处于TIME_WAIT状态: image.png

    5. 这个TIME_WAIT会存在大概1分钟的时间才会被自动回收,但如果在这个回收之前再次打开这个hap应用,会发现应用不会再创建8222端口的监听服务会自动随机监听一个端口,不会复用8222,只有在之前的连接实例被回收后才能创建8222端口监听服务,不知道怎么解决😕 image.png

    【运行环境】

    硬件:飞腾派E2000 内装OpenHarmony4.0.10.23 ROM版本: DevEvoStudio版本:4.0.0.600 SDK版本:10

    您尚未登录,无法参与评论,登录后可以:
    参与开源共建问题交流
    认同或收藏高质量问答
    获取积分成为开源共建先驱

    精彩评论1

    MAK丶E

    沙发 发表于 昨天 14:03
    有没有大佬指导一下的

    Copyright   ©2023  OpenHarmony开发者论坛  京ICP备2020036654号-3 |技术支持 Discuz!

    返回顶部