美文网首页
iOS SSDP发现协议实现

iOS SSDP发现协议实现

作者: 黑黝黝的搬砖王 | 来源:发表于2018-12-20 18:04 被阅读0次
    • 上篇文章中有介绍 主流智能家居无线协议,现在我们就来实际实现冷门的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发现协议实现

          本文链接:https://www.haomeiwen.com/subject/wcxukqtx.html