基于IOTCAPIs的局域网设备搜索
功能描述
目前IOTCAPIs里面有提供一套局域网搜索的API,用以搜索同一个路由器下的设备。
API:
1.IOTC_Lan_Search2 ;此接口已废弃
2.IOTC_Lan_Search2_Ex;此接口已废弃
3.IOTC_Search_Device_Start+ IOTC_Search_Device_Stop+IOTC_Search_Device_Result
使用方法
APP端在需要搜索局域网设备时使用,这里以方法3为例。
// 设备搜索结果结构体数组(最多存储20台设备)
struct st_SearchDeviceInfo devices[20];
int deviceCount = 0;
// 启动设备搜索:超时3000ms,搜索间隔100ms
IOTC_Search_Device_Start(3000, 100);
// 循环获取搜索结果,直到收到中断请求
while (!isInterruptionRequested()) {
// 获取搜索到的设备列表(最多20台,0表示非阻塞模式)
int ret = IOTC_Search_Device_Result(devices, 20, 0);
if (ret < 0) {
// 搜索出错,退出循环
printf("设备搜索出错,错误码:%d\n", ret);
break;
} else if (ret > 0) {
// 发现新设备,更新设备计数并打印UID
deviceCount = ret;
printf("发现%d台设备:\n", deviceCount);
for (int i = 0; i < deviceCount; i++) {
// 修正:使用正确的数组名devices,而非psSearchDeviceInfo
printf(" 设备%d UID:%s\n", i + 1, devices[i].UID);
}
}
// 若ret=0,无新设备,不处理
// 1秒后再次查询
msleep(1000);
}
// 停止设备搜索,释放资源
IOTC_Search_Device_Stop();
printf("设备搜索已停止,共发现%d台设备\n", deviceCount);API说明
int32_t IOTC_Search_Device_Result(struct st_SearchDeviceInfo* psSearchDeviceInfo,int32_t nArrayLen,int32_t nGetAll) 参数说明: [out] psSearchDeviceInfo,设备信息数组指针,即搜索结果会通过这个指针返回给应用层。 [in] nArrayLen,设备信息数组的长度 [in] nGetAll,0表示只返回新搜索到的设备,1表示所有的设备 返回值: 本次搜索到的UID的个数。
搜索到的设备,会存放到psSearchDeviceInfo数组中,对应的设备信息可以参考结构体的定义。
Tips
1.如果不想在搜索过程中,暴露出UID,设备端可以使用IOTC_Set_Device_Name(user_define_string)来携带自定义的字符串标识,APP端在搜到的参数里面可以拿到这个字符串标识。
2.如果想修改搜索端口,可以使用IOTC_Set_LanSearchPort()设定其他的端口,SDK默认使用32761端口做广播搜索。
