- 上篇文章中有介绍 主流智能家居无线协议,现在我们就来实际实现冷门的SSDP发现协议,之所以说冷门是因为笔者到目前为止才在对接中第一次使用,与之形成鲜明对比的是
ZigBee协议
Wifi技术
大受欢迎。
这里我们使用CocoaSSDP来实现,至于为什么要使用国外的第三方是实现SSDP发现协议,前期笔者也自己实现了,但是发现不同厂家路由器时有出现个别厂家不能发现的情况,所以就更换实现途径,使用CocoaAsyncSocket发现用CocoaAsyncSocket来发送Socket也无法实现,最后在google中发现国外小哥封装的CocoaSSDP兼容性做的比较好,同时适用于Mac和iOS的简单服务发现协议客户端库。
使用方法
- 1、直接在使用的地方初始化
SSDPServiceBrowser
类
ssdpBrowser = [[SSDPServiceBrowser alloc] init];
ssdpBrowser.delegate = self;
[ssdpBrowser startBrowsingForServices:SSDPServiceType_YueMeTV];
- 2、遵循协议,实现协议方法
#pragma mark --- SSDPServiceBrowserDelegate
- (void)ssdpBrowser:(SSDPServiceBrowser *)browser didNotStartBrowsingForServices:(NSError *)error
{
DLog(@"SSDP Browser got error: %@", error);
}
- (void)ssdpBrowser:(SSDPServiceBrowser *)browser didFindService:(SSDPService *)service
{
DLog(@"SSDP Browser found: %@", service);
NSString *location = [service.location absoluteString];
NSArray *deviceSnArray = [location componentsSeparatedByString:@"/"];
NSString *deviceSn = [NSString stringWithFormat:@"%@#%@",deviceSnArray[deviceSnArray.count-2],deviceSnArray.lastObject];
isSearchSuccess = YES;
[self thirdBindWithDeviceSN:deviceSn];
}
- (void)ssdpBrowser:(SSDPServiceBrowser *)browser didRemoveService:(SSDPService *)service
{
DLog(@"SSDP Browser removed: %@", service);
}
- 3、最后在dealloc中让搜索停止
-(void)dealloc
{
[ssdpBrowser stopBrowsingForServices];
}
注意事项
- 1、
SSDPServiceBrowser.m
中 消息体中参数需要和厂家协议好
NSString *userAgent = [self _userAgentString];
return [NSString stringWithFormat:@"M-SEARCH * HTTP/1.1\r\n"
"HOST: %@:%d\r\n"
"MAN: \"ssdp:discover\"\r\n"
"MX: 5\r\n"
"ST: %@\r\n"
"USER-AGENT: %@/1\r\n\r\n\r\n", SSDPMulticastGroupAddress, SSDPMulticastUDPPort, serviceType, userAgent];
}
- 下方我们客户端和设备厂家SSDP发现协议,仅供参考
![](https://img.haomeiwen.com/i3346949/f63048c5955eb48b.png)
网友评论