iOS SSDP发现协议实现

  • 上篇文章中有介绍 主流智能家居无线协议,现在我们就来实际实现冷门的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发现协议,仅供参考
设备发现

你可能感兴趣的:(iOS SSDP发现协议实现)