OpenHarmony开发者论坛

标题: 使用TCP出现的一些问题 [打印本页]

作者: camel    时间: 2024-7-22 16:20
标题: 使用TCP出现的一些问题
[md]### 用手机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
[/md]
作者: 深开鸿_王石    时间: 2024-7-23 08:46
你试下吧connect做个单独button,也就是只连一次,然后多次send,应该是connect多次被调用有问题




欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/) Powered by Discuz! X3.5