HarmonyOS鸿蒙Next开发环境模拟器通过tcp客户端连接宿主tcp服务器,能连接,但是发送的消息宿主服务器接收不到怎么回事?

HarmonyOS鸿蒙Next开发环境模拟器通过tcp客户端连接宿主tcp服务器,能连接,但是发送的消息宿主服务器接收不到怎么回事? 本机DevEco Studio开发环境,运行鸿蒙app在模拟器上,通过socket.TLSSocket单向认证连接服务器(服务器即为本机宿主机),服务端也是单向认证,能连接上,但是发送消息包时,服务端收不到消息。

服务端主要代码如下:

SslContext sslContext = SslContextBuilder.forServer(
    new File(TLSNettyConfigMager.getCrtstore()), //server.crt
    new File(TLSNettyConfigMager.getKeystore()), //server.key
    TLSNettyConfigMager.getPassword()
).build();
并且绑定了宿主机的区域网ip:192.168.3.4

鸿蒙客户端代码如下:

// 创建TLS Socket实例
this.sockClient = socket.constructTLSSocketInstance();
let clientIpAddress: socket.NetAddress = {
    address: '0.0.0.0',
    port: 0,
    family: 1 // IPv4
};
// 绑定本地IP地址和端口。
await new Promise<void>((resolve, reject) => {
    this.sockClient!.bind(clientIpAddress, (err: Error) => {
        if (err) {
            Logger.error("Socket绑定失败", err);
            reject(err);
        } else {
            Logger.info("Socket绑定", "Socket绑定成功");
            resolve();
        }
    });
});
let context = this as common.UIAbilityContext;
let resourceManager = context.resourceManager;
let caCert = await resourceManager.getRawFileContent(ConfigManager.getConfig().socketserver.tls_castore);
let caStr = DataUtil.Uint8ArrayToString(caCert);
Logger.info("加载CA正常:", caStr);
// 客户端连接,单向认证只需要ca
let tlsSecureOption: socket.TLSSecureOptions = {
    ca: [caStr],
    protocols: [socket.Protocol.TLSv13, socket.Protocol.TLSv12],
    useRemoteCipherPrefer: true
}
let serviceIpAddress: socket.NetAddress = {
    address: ConfigManager.getConfig().socketserver.server_address, //此处绑定的是服务端的ip
    port: ConfigManager.getConfig().socketserver.server_port,
    family: 1 // IPv4
};
let tlsClientConnectOption: socket.TLSConnectOptions = {
    address: serviceIpAddress,
    secureOptions: tlsSecureOption
};
await new Promise<void>((resolve, reject) => {
    // 添加延迟确保socket实例完全初始化
    setTimeout(() => {
        this.sockClient!.connect(tlsClientConnectOption, (err: BusinessError) => {
            if (err) {
                Logger.error("Socket连接失败", err);
                reject(err);
            } else {
                Logger.info("Socket", "TLS连接成功");
                this.isConnected = true;
                // 订阅消息事件
                this.sockClient!.on('message', (message: SocketMessage) => {
                    this.handleSocketMessage(message);
                });
                // 订阅错误事件
                this.sockClient!.on('error', (error: BusinessError) => {
                    this.handleSocketError(error);
                });
                // 订阅关闭事件
                this.sockClient!.on('close', () => {
                    this.handleSocketClose();
                    TLSSocketClientManager.getInstance().invoke("close");
                });
                resolve();
            }
        });
    }, 50); // 50ms延迟确保实例初始化
});

鸿蒙客户端日志:

06-13 08:46:21.886  14539-14539  A03d00/JSAPP       com.examp...lication I   [TESTINFO][Socket] TLS连接成功
06-13 08:46:21.888  14539-14539  A03d00/JSAPP       com.examp...lication I   [TESTINFO][认证] 开始认证.......
06-13 08:46:21.890  14539-14539  A03d00/JSAPP       com.examp...lication I   [TESTINFO][Socket] TLS socket initialized successfully
06-13 08:46:21.895  14539-14539  A03d00/JSAPP       com.examp...lication I   [TESTINFO][encode 16进制结果:] 0x55 0xaa 0x00 0x00 0x00...................
06-13 08:46:21.901  14539-14539  A03d00/JSAPP       com.examp...lication I   [TESTINFO][发送数据开始:] 0x55 0xaa 0x00 0x00 0x00.......................
06-13 08:46:21.902  14539-14539  C015b0/NETSTACK    com.examp...lication I   [module_template.h:245] js invoke send
06-13 08:46:21.906  14539-14539  A03d00/JSAPP       com.examp...lication I   [TESTINFO][发送数据结束:] 0x55 0xaa 0x00 0x00 0x00.......................

服务端日志:

2025-06-13 09:34:19.693[nioEventLoopGroup-2-1]-INFO io.netty.handler.logging.LoggingHandler-[id: 0x1f377666, L:/192.168.3.4:62162] READ: [id: 0x154b7c3c, L:/192.168.3.4:62162 - R:/192.168.3.4:63269]
2025-06-13 09:34:19.694[nioEventLoopGroup-2-1]-INFO io.netty.handler.logging.LoggingHandler-[id: 0x1f377666, L:/192.168.3.4:62162] READ COMPLETE
2025-06-13 09:34:19.719[nioEventLoopGroup-3-3]-INFO cg.base.tcpsocket.facade.service.impl.NattyBaseHandler-客户端连接: /192.168.3.4:63269
2025-06-13 09:35:00.002[DefaultQuartzScheduler_Worker-2]-INFO cg.message.wechat.facade.minibase.impl.WeChatAuthSessionExpireServiceJob-WeChatAuthSessionExpireServiceJob print…tc…
2025-06-13 09:35:49.820[nioEventLoopGroup-3-3]-INFO cg.base.tcpsocket.facade.service.impl.NattyBaseHandler-读超时,关闭连接: /192.168.3.4:63269
2025-06-13 09:35:49.824[nioEventLoopGroup-3-3]-INFO cg.base.tcpsocket.facade.service.impl.NattyBaseHandler-客户端断开: /192.168.3.4:63269

服务端检测到客户长时间没有发送数据,自动关闭连接,但是客户端其实是发送数据了。


更多关于HarmonyOS鸿蒙Next开发环境模拟器通过tcp客户端连接宿主tcp服务器,能连接,但是发送的消息宿主服务器接收不到怎么回事?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

可能原因:

  • 模拟器网络配置问题,未正确桥接宿主机网络
  • 防火墙或安全软件阻挡了通信
  • 端口未正确映射或绑定
  • 发送的数据格式不符合服务器预期
  • 网络地址转换(NAT)配置不当

排查步骤:

  • 确认模拟器网络适配器设置为桥接模式
  • 检查宿主机防火墙设置
  • 使用抓包工具(Wireshark)验证数据包是否发出
  • 测试本地环回通信是否正常

更多关于HarmonyOS鸿蒙Next开发环境模拟器通过tcp客户端连接宿主tcp服务器,能连接,但是发送的消息宿主服务器接收不到怎么回事?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


从日志和代码分析,问题可能出在以下几个方面:

  1. 网络配置问题:
  • 模拟器网络与宿主机网络需要确保在同一网段
  • 检查宿主机防火墙是否放行了指定端口(62162/63269)
  1. TLS握手问题:
  • 客户端日志显示TLS连接成功但服务端没有收到数据
  • 检查CA证书是否与服务端证书匹配
  • 确认协议版本(TLSv1.2/1.3)两端配置一致
  1. 数据发送方式:
  • 客户端显示调用了send但服务端未收到
  • 建议在客户端send后添加回调检查发送结果
  • 检查数据编码格式(服务端是否支持16进制格式)
  1. 模拟器网络限制:
  • 鸿蒙模拟器可能对本地回环地址(127.0.0.1)支持不完善
  • 尝试使用真实局域网IP而非0.0.0.0

建议先通过telnet或wireshark等工具确认网络连通性,再检查TLS握手过程是否完整。

回到顶部