HarmonyOS 鸿蒙Next 官方的socket和websocket通信问题求助,在模拟器api9下无法连接,确认下是否是bug?

发布于 1周前 作者 caililin 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 官方的socket和websocket通信问题求助,在模拟器api9下无法连接,确认下是否是bug? 测试看在模拟器下运行,使用api9的P50设备,http通信是ok的。但是测了下 socket和websocket通信,一个简单的demo都无法跑通。

想问下这是管方的bug吗?如果是什么时候能够解决下?(当前的最新的P50设备都无法测试socket通信),

另外问下api10以上的模拟器什么时候能够出来?有知道的吗?

import socket from '@ohos.net.socket';
import http from '@ohos.net.http';
@Entry
@Component
struct Index {
  @State message: string = 'Hello World1';

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)

        Button('test1').width(300).margin({ top: 20 })
          .onClick(() => {
            var tcp = socket.constructTCPSocketInstance();
            tcp.on('message', value => {
              console.log("on message")
              let buffer = value.message
              let dataView = new DataView(buffer)
              let str = ""
              for (let i = 0; i < dataView.byteLength; ++i) {
                str += String.fromCharCode(dataView.getUint8(i))
              }
              console.log("on connect received:" + str)
            });
            tcp.on('connect', () => {
              console.log("on connect")
            });
            tcp.on('close', () => {
              console.log("on close")
            });
            tcp.on('error', err => {
              console.log("on error, err:" + JSON.stringify(err))
            });

            let bindAddress = {
              address: '127.0.0.1',
              port: 12345, // 绑定端口,如1234
              family: 1
            };
            tcp.bind(bindAddress, err => {
              if (err) {
                console.log("bind fail, err:" + JSON.stringify(err))
                return;
              }
              console.log('bind success');
              let connectAddress = {
                address: '114.115.170.245',
                port: 8081, // 连接端口,如5678
                family: 1
              };
              tcp.connect({
                address: connectAddress, timeout: 6000
              }, err => {
                if (err) {
                  console.log("connect fail, err:" + JSON.stringify(err))
                  return;
                }
                console.log('connect success');
                tcp.send({
                  data: 'Hello, server!'
                }, err => {
                  if (err) {
                    console.log('send fail')
                    return;
                  }
                  console.log('send success')
                })
              });
            });

            setTimeout(() => {
              tcp.close(err => {
                console.log('close socket.')
              });
              tcp.off('message');
              tcp.off('connect');
              tcp.off('close');
            }, 30 * 1000);

            let httpRequest = http.createHttp();
            httpRequest.request("http://114.115.170.245:8081/", (err, data) => {
              if (!err) {
                console.info('Result:' + data.result);
                console.info('code:' + data.responseCode);
                console.info('header:' + JSON.stringify(data.header));
                console.info('cookies:' + data.cookies); // 8+
              } else {
                console.info('error:' + JSON.stringify(err));
              }
            });
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

有什么问题吗?地址 http://114.115.170.245:8081 可供测试,端口是通的

另外测试websocket接口也有问题,无论url的地址能否访问,以下代码总能看到Connected successfully的日志,而实际并未连接成功。

以下代码可供测试验证:

let url = "ws://broker.emqx.io:8083/mqtt"

ws.connect(wsurl, (err, value) => {
                if (!err) {
                    this._trace("Connected successfully");
                } else {
                    this._trace("Connection failed. Err:" + JSON.stringify(err));
                }
            });

更多关于HarmonyOS 鸿蒙Next 官方的socket和websocket通信问题求助,在模拟器api9下无法连接,确认下是否是bug?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复
把address: '127.0.0.1',改成address: '0.0.0.0'即可。

127.0.0.1为本地回环地址,只适合本地通讯,不适合网络通讯。

0.0.0.0代表所有可用本地地址,也可以使用实际的ip地址。

TCP协议相关示例可以参考:

[鸿蒙网络编程系列3-TCP客户端通讯示例](https://developer.huawei.com/consumer/cn/blog/topic/03148031515609013)

[鸿蒙网络编程系列4-实现Smtp邮件发送客户端](https://developer.huawei.com/consumer/cn/blog/topic/03148160059378015)

[鸿蒙网络编程系列5-TCP连接超时分析](https://developer.huawei.com/consumer/cn/blog/topic/03148217505374053)

[鸿蒙网络编程系列6-TCP数据粘包表现及原因分析](https://developer.huawei.com/consumer/cn/blog/topic/03148292106131016)

更多关于HarmonyOS 鸿蒙Next 官方的socket和websocket通信问题求助,在模拟器api9下无法连接,确认下是否是bug?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


必须给你点个赞!

我也遇到了会连接成功 但是一会就会触发Error事件

这个双框架模拟器应该是不支持

针对您提到的HarmonyOS 鸿蒙Next 官方的socket和websocket通信问题,在模拟器API 9下无法连接的情况,这里提供以下分析:

  1. 模拟器环境限制:API 9版本的模拟器可能存在一定的环境限制或配置问题,导致socket和websocket通信无法正常工作。这可能是由于模拟器的网络配置、防火墙设置或系统权限等原因导致的。

  2. 版本兼容性问题:由于您使用的是鸿蒙Next的早期版本(API 9),可能存在与当前socket和websocket库版本不兼容的情况。随着鸿蒙系统的不断迭代更新,新版本的系统可能修复了旧版本中的bug或增加了新的功能,因此建议尝试使用更新版本的鸿蒙模拟器进行测试。

  3. 代码实现问题:虽然您未提供具体的代码实现,但也有可能是代码本身存在问题,如网络请求的配置错误、端口号错误或未正确处理异常等。

综上所述,建议首先确认模拟器的网络配置和防火墙设置是否正确,并尝试使用更新版本的鸿蒙模拟器进行测试。如果问题依旧存在,可能是代码实现或系统bug导致,建议进一步排查代码或等待鸿蒙系统的更新。

如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html

回到顶部