收藏
回答

TCPSocket 模拟器正常 真机调试报错?

发送第一条第二条信息成功,但是adress:0.0.0.0 port:0 然后报错 errCode为-2 查看文档对应errno又表示正常 白名单已配置

回答关注问题邀请回答
收藏

2 个回答

  • 云舒
    云舒
    2023-08-29
    //具体代码片段如下:出现现象编译器上都是正常OK 真机调试如上图所示
    //app.js
    
    const TCPSocket = wx.createTCPSocket();
    
    
    TCPSocket.onMessage((res) => {
      console.log(res)
      var pages = getCurrentPages()
      var index = pages[pages.length - 1]
      index.setData({
        motto: res.remoteInfo.address
      })
    })
    
    
    function TCPSend(cmd, data, len{
      let buffer = new ArrayBuffer(6 + len);
      let dataArray = new Int8Array(buffer);
    
    
      dataArray[0] = 0x33;
      dataArray[1] = 0x7c;
      dataArray[2] = cmd;
      dataArray[3] = len >> 8;
      dataArray[4] = len;
    
    
      if (data) {
        for (let i = 0; i < len; i++) {
          dataArray[5 + i] = data[i];
        }
        dataArray[5 + len] = 0x42;
      } else {
        dataArray[5] = 0x42;
      }
    
    
      TCPSocket.write(dataArray)
    }
    TCPSocket.onError((res) => {
      console.log("错误:", res)
      TCPSocket.close()
    })
    
    
    module.exports = {
      TCPSend,
      TCPSocket
    }
    
    //index.js
      //按钮点击发送连接申请
     bind2(){
        appC.TCPSocket.connect({
          address"at.efl-tech.com",  //8.130.28.255
          port44514
        })
    
    
        appC.TCPSocket.onConnect(() => {
          console.log("连接上来了")
          appC.TCPSend(0x02null0)
          setTimeout(function () {
            let data = new Uint8Array();
            data = [000111495051525354]
            appC.TCPSend(0x05, data, 10)
          }, 100)
        })
      },
        //按钮发送测试
      bind5() {
        let data = new Uint8Array();
        data = [000111495051525354]
        appC.TCPSend(0x05, data, 10)
      },
        //按钮发送测试1
        bind11() {
        appC.TCPSend(0x11null0)
      },
        //按钮发送测试2
        bind50() {
        appC.TCPSend(0x50null0)
      },
    
    2023-08-29
    有用 1
    回复
  • hmzawz2
    hmzawz2
    2023-10-26

    请问您解决问题了么?我昨天也出现了相同的问题,想请教您后来的解决办法,谢谢!

    后续记录一下:

    1. 暂不知道该问题的原因,复现情况是建立TCPSocket,在获取信息时获取的local和remote ip为空。关闭TCPSocket会报错,如上面题主的记录。
    2. 本地暂时绕过了该问题,调试器和抓包发现,虽然local和remote的ip有问题,但里面是能有数据的。现在本地在onError时的回调函数里关闭了tcp连接,表现符合预期。
    3. 在关闭TCP连接时会报错,无论是服务器端关闭还是客户端关闭都出现该问题。错误信息如楼主问题所示。猜测是微信小程序客户端收到信息时候把ip信息过滤掉了。设备端使用抓包助手抓包,包是正常的。
    4. 考虑到仍然能接收到数据,我这边的需求暂时可以满足,不过微信小程序TCPSocket的onMessage函数的ip信息在模拟器和手机端表现不一致(至少已知的包括楼主的设备、个人使用华为Mate20 Mate60都存在这个问题)是肯定存在的,希望微信官方赶快修复吧。


    2023-10-26
    有用
    回复
登录 后发表内容