使用TCP出现的一些问题

camel 显示全部楼层 发表于 2024-7-22 16:20:49

用手机TCP作为客户端主动连接电脑TCP服务端

手机每单击一次按钮,发送一个递增的数字到服务端,发送两次之后,在发送第三次时服务端接收不到了。但服务端发送到客户端没问题。

按钮代码

        Button('发送TCP消息')
          .onClick(() => {
            this.message_send+=1;
            TCP_Connect.TCP_send(TCP_Connect.Target_IP,this.message_send.toString());
          }).width('90%').height(80).margin({ top: 50 }).type(ButtonType.Capsule)

创建TCP对象及绑定本地地址代码(about ToAppear时执行)

  TCPInit():void{
    // 创建一个TCPSocket连接,返回一个TCPSocket对象。
    TCP_Connect.tcp = socket.constructTCPSocketInstance();
    TCP_Connect.tcp.on('message', (value: SocketInfo) => {

      console.log("on message");
      this.message_recv = this.resolveArrayBuffer(value.message);
      /*
      let buffer = value.message;
      let dataView = new DataView(buffer);
      for (let i = 0; i < dataView.byteLength; ++i) {
        this.message_recv += String.fromCharCode(dataView.getUint8(i));
      }
      * */
      console.info("on connect received:" + TCP_Connect.Receive_message);

    });
    TCP_Connect.tcp.on('connect', () => {
      console.log("on connect");
    });
    TCP_Connect.tcp.on('close', () => {
      console.log("on close");
    });

    // 绑定本地IP地址和端口。
    TCP_Connect.Local_IP.address = JSON.stringify(wifiManager.getIpInfo().ipAddress);
    TCP_Connect.Local_IP.port = 1234;
    TCP_Connect.tcp.bind(TCP_Connect.Local_IP, (err) => {
      if (err) {
        console.log('bind fail');
        return;
      }
      console.log('bind success');
    });
  }

}

TCP发送代码

  static TCP_send(taget_ip:string,msg:string):void
  {
    console.log("aaaa----")
    // 连接到指定的IP地址和端口。
    this.ipAddress.address = taget_ip;
    this.ipAddress.port = 5678;

    let tcpConnect : socket.TCPConnectOptions = {} as socket.TCPConnectOptions;
    tcpConnect.address = this.ipAddress;
    tcpConnect.timeout = 6000;

    this.tcp.connect(tcpConnect).then(() => {
      console.log('connect success');
      let tcpSendOptions: socket.TCPSendOptions = {
        data: msg
      }
      this.tcp.send(tcpSendOptions).then(() => {
        console.log('send success');
      }).catch((err) => {
        console.log('send fail');
      });
    }).catch((err) => {
      console.log('connect fail');
    });
  }

【运行环境】

硬件:HuaWei Nova 10 DevEvoStudio版本:4.0 SDK版本:API 9

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

精彩评论1

深开鸿_王石

沙发 发表于 2024-7-23 08:46:18
你试下吧connect做个单独button,也就是只连一次,然后多次send,应该是connect多次被调用有问题

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

返回顶部