HarmonyOS开发之Socket通信-2301088、2301099

这里写自定义目录标题

背景

项目上需要用手机控制一台设备,内部局域网下使用,设备作为服务器,手机作为客户端,使用Socket进行通信。
设备ip:192.168.10.211,端口:2345。
手机系统:HarmonyOS 4
开发环境:Deveco Studio 3.1,Api9
开发语言:ArkTS

遇到的问题

官方文档提供了Socket说明,并提供了一些错误码的说明,但本人开发时遇到的错误码不在官方的错误列表中,例如2301088,2301099这两个错误码,故在此记录一下。
以下是官方提供的socket示例代码,重点**HarmonyOS必须要绑定本机的ip,才能去连接别的ip**,这个在官方文档中没有说明。另外注意需要网络权限 “ohos.permission.INTERNET”。

import socket from '@ohos.net.socket';

// 创建一个TCPSocket连接,返回一个TCPSocket对象。
let tcp = socket.constructTCPSocketInstance();

// 订阅TCPSocket相关的订阅事件
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")
});

// 绑定IP地址和端口。 (本机地址,端口号可以任意,只要没被占用就行)
let bindAddress = {
  address: '192.168.xx.xx',
  port: 1234, // 绑定端口,如1234
  family: 1
};
tcp.bind(bindAddress, err => {
  if (err) {
    console.log('bind fail');
    return;
  }
  console.log('bind success');
  // 连接到指定的IP地址和端口。(服务器地址)
  let connectAddress = {
    address: '192.168.xx.xx',
    port: 5678, // 连接端口,如5678
    family: 1
  };
  tcp.connect({
    address: connectAddress, timeout: 6000
  }, err => {
    if (err) {
      console.log('connect fail');
      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);

本人测试时对官方代码做了略微修改,其实参照官方代码既可以。
若不绑定本机ip直接进行connect,无法连接并提示2301088错误。
2301088

在本地模拟机上运行,虽然绑定了本机IP(192.168.10.249),但提示2301099错误码。2301099在这里插入图片描述
最后在真机上调试,将本地ip设置为真机的地址,连接成功。

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值