背景
项目上需要用手机控制一台设备,内部局域网下使用,设备作为服务器,手机作为客户端,使用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);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
本人测试时对官方代码做了略微修改,其实参照官方代码既可以。
若不绑定本机ip直接进行connect,无法连接并提示2301088错误。
在本地模拟机上运行,虽然绑定了本机IP(192.168.10.249),但提示2301099错误码。
最后在真机上调试,将本地ip设置为真机的地址,连接成功。
评论记录:
回复评论: