#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#include<errno.h>

#include<sys/types.h>

#include<sys/socket.h>

#include<netinet/in.h>

#include<arpa/inet.h>

#include<unistd.h>

//pch 文件导入

//扫描本地设备 --- 智能家居

-(void)scanLocalDevice

{

NSLog(@"开始扫描本地设备");

setvbuf(stdout, NULL, _IONBF, 0); // 不要缓冲区

fflush(stdout); // 清除缓冲区

int sock = -1;

//AF_INET : #define AF_INET 2 // internetwork: udp, tcp, etc.

// SOCK_DGRAM是基于UDP的,专门用于局域网,基于广播

// 0 : 调用的协议

if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1)

{

return;

}

const int opt = 1;

//设置该套接字为广播类型,

int nb = 0;

nb = setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (char *)&opt, sizeof(opt));

struct sockaddr_in addrto;

bzero(&addrto, sizeof(struct sockaddr_in));

addrto.sin_family=AF_INET;

addrto.sin_addr.s_addr=htonl(INADDR_BROADCAST); // //广播地址:255.255.255.255

addrto.sin_port=htons(1025);

int nlen=sizeof(addrto);

while(1)

{

totalSearchTime += 1;

NSLog(@"-->%d",totalSearchTime);

sleep(1);

//从广播地址发送消息

char smsg[] = {"Are You Espressif IOT Smart Device?"};//与硬件约定的响应消息 硬件收到广播之后主动广播回主动发送自己的mac的地址和ip地址

long ret=sendto(sock, smsg, strlen(smsg), 0, (struct sockaddr*)&addrto, nlen);

if(ret<0){

}

else{

socklen_t size;

char buf[MAXDATASIZE];

memset(buf, 0, MAXDATASIZE);

recvfrom(sock,buf,MAXDATASIZE,0,(struct sockaddr *)&addrto,&size);

NSString *str = [NSString stringWithFormat:@"%s",buf];

NSArray * arry = [str componentsSeparatedByString:@" "];

NSString *tempstr = arry[1];

NSString *ip = arry[2];

NSRange range = [tempstr rangeOfString:@"."];

range.length = range.location;

range.location = 0;

range.location=range.length+1;

range.length = [tempstr length] - range.location;

NSString *mac = [tempstr substringWithRange:range];

NSArray *arr = [NSArray arrayWithObjects:ip,mac, nil];

NSLog(@"----------->   扫描到的IP 和 MAC --->IP = %@ Mac = %@",ip,mac);

[ListArray addObject:arr];

if (totalSearchTime == 20) {

totalSearchTime = 0;

[self getEqupmentIP];

break;

}

}

}

}

最新文章

  1. SublimeText配置NodeJS代码提示
  2. LUN/PV/VG/LV
  3. SVN常见图标的含义
  4. 转:webRTC的前世今生
  5. mysql优化小技巧
  6. ③jQuery生成html元素
  7. 网页提示错误(net::ERR_EMPTY_RESPONSE)
  8. [opengl]Clion配置opengl
  9. git add * 提示warning: LF will be replaced by CRLF in 解决办法
  10. Django templates 模板的语法
  11. ubuntu14 16使用libusb过程中遇到的问题及解决方法
  12. Netty Tutorial Part 1: Introduction to Netty [z]
  13. JavaScript 检查是否是数字
  14. 获取控制台窗口句柄GetConsoleWindow
  15. 高并发TCP连接数目问题
  16. BZOJ5125 小Q的书架(决策单调性+动态规划+分治+树状数组)
  17. TC规则
  18. UIButton 设置圆角 边框颜色 点击回调方法
  19. Could not contact Selenium Server; have you started it on &#39;localhost:4444&#39;
  20. 1.2_php验证码

热门文章

  1. VS2015打开工程文件卡死
  2. iOS横竖屏
  3. o2o
  4. 网页title标题的闪动效果
  5. MAC中通过gem命令安装compass
  6. HTML5画布(矩形)
  7. [Mugeda HTML5技术教程之17] 理解Mugeda访问统计结果
  8. 关闭并且禁用ECSHOP缓存
  9. Scala学习文档-各种使用模式的情况
  10. stm32通用定时器中断问题