iOS 局域网搜索可以使用两种方式。第一种方式局域网广播方式、此方式一般在3秒内就会相应。第二种方式也是比较笨拙的方式通过ping方式、这种方式一般是在硬件本身并不支持广播功能。此方法弊端:搜索时间长。推荐:可以有广播功能的使用第一种方式、没有广播功能和局域网内设备相对较少以及是连接手机wifi热点的情况。
第一种方式 广播:
推荐使用第三方GCDAsynSoket 代码如下:
@interface SearchCenter()<GCDAsyncUdpSocketDelegate> //@property(nonatomic, strong) NSMutableArray *arpTableList; @property(nonatomic, strong) GCDAsyncUdpSocket *gcdAsyncUdpSocket; //广播定时器 @property(nonatomic, strong) NSTimer *broadcastTimer; @end -(GCDAsyncUdpSocket *)gcdAsyncUdpSocket { if (!_gcdAsyncUdpSocket) { //: CameraBroadCastResponsePort 为设备回调消息过来的监听端口 _gcdAsyncUdpSocket = [[GCDAsyncUdpSocket alloc]initWithDelegate:self delegateQueue:dispatch_get_main_queue()]; NSError *err = nil; [_gcdAsyncUdpSocket enableBroadcast:YES error:&err]; [_gcdAsyncUdpSocket bindToPort: CameraBroadCastResponsePort error:&err]; [_gcdAsyncUdpSocket beginReceiving:&err]; } return _gcdAsyncUdpSocket; } -(NSTimer *)broadcastTimer { if (!_broadcastTimer) { _broadcastTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(broadcastAction) userInfo:nil repeats:YES]; [_broadcastTimer setFireDate:[NSDate distantFuture]]; } return _broadcastTimer; } #pragma mark 广播方式搜索 -(void)startUdpBroadcastAddress:(NSString *)broadcastAddress { _broadcastAddress = broadcastAddress; _currentSearchStatus = KPXSearchStatusSearching; _searchTimes = 0; [self.deviceList removeAllObjects]; NSLog(@"开始udp广播"); [self.broadcastTimer setFireDate:[NSDate distantPast]]; } //广播定时器 -(void)broadcastAction { //_broadcastAddress 为广播地址(该地址获取方式请下载代码查看) CameraBroadCastMonitorPort为硬件设备监听端口 NS