簡體   English   中英

Apple Bonjour:我怎么知道哪個已發布的服務是我自己的?

[英]Apple Bonjour: how can I tell which published service is my own?

我有兩台iOS設備使用Bonjour API成功找到對方,但由於它們同時發布和瀏覽,它們也會看到自己出現在可用服務列表中。 必須有一些信息,每個端點可以用來確定一個服務是他們自己的,並將其從列表中排除...我敢肯定我只是錯過了某個地方 - 任何想法?

我使用了文檔中的示例並進行了一些小的更改。

mDNS沒有對設備邊界進行任何區分 - 鏈路本地網絡上的每個mDNS解析器都會偵聽默認情況下發送到224.0.0.251所有多播數據包,無論其來源如何。 把它想象成一個美化的短波電台。 好吧,有點兒。

這意味着當您瀏覽服務時,NSNetServiceBrowser不區分主機(有時我發現它是服務器端應用程序中的一個有用功能)。

我建議忽略你自己的服務的最簡單的方法是檢查NSNetService返回的NSNetService對象的hostname netServiceBrowser:didFindService:moreComing:回調不是你的,在你做任何你需要做的事情之前。

我正在使用IOS 8.1,我有同樣的問題。 我最后將didFindService返回的每個服務的名稱與代表我的bonjour服務器的本地NSNetService的名稱進行比較。

根據我看到的調試我的應用程序,每個NSNetService的主機名都是nil,直到服務解析。 在我的情況下,我沒有在didFindService中調用resolveWithTimeout,因為我想顯示數據需要很長時間。

如接受的答案所示,將NSNetService名稱與設備名稱進行比較:

- (void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didFindService:(NSNetService *)aNetService moreComing:(BOOL)moreComing
{
    // Ignore the local device if specified
    if ([aNetService.name isEqualToString:UIDevice.currentDevice.name])
    {
        NSLog(@"NETSERVICE: Ignoring NetService for self: '%@'", aNetService.name); 
    }
    else
    {
        ...
    }

    // If that's it then stop the browser (it's manually controlled)
    if (!moreComing) {
        [_netBrowser stop];
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM