2010-05-26 49 views
3

在我的iPhone應用程序,我發佈Bonjour服務,並使用以下的委託方法:iPhone SDK:Bonjour&NSNetService名稱!=發佈的名稱?

- (void)netServiceDidPublish:(NSNetService *)ns 
{ 
    NSLog(@"Bonjour Service Published: http://%@.%@", [ns name], [ns domain]); 
} 

「名稱」屬性返回的設備名稱,「怎麼測試」,這是正確的。但是,當我使用Safari發現可用服務時,該名稱是「測試」 - 服務爲http://hows-testing.local.:somePortNumber

爲什麼發佈的名稱與NSNetService報告的內容不同?如何顯示已發佈服務的實際名稱?假設出於某種原因,沒有辦法從對象中獲取已發佈的名稱,我該如何確定它?我知道它是基於設備名稱的,但替代規則是什麼?刪除撇號,用短劃線替換空格...其他任何東西?特殊字符呢?

+0

嗨有。你解決了這個問題嗎?我有一個完全相同的問題,我的主機名字符串像'戴夫的iPhone',但我想將其轉換爲主機名稱,在這種情況下將是:「daves-iphone」。我可以做字符替換,但我相信有一個更優雅的方式! 如果您發佈您的解決方案,我將非常感激。謝謝 ! – 2010-07-21 13:28:03

回答

1

我相信「hows-testing」是計算機的主機名,而不是服務的名稱。相反,你要看看主機名屬性:

- (void)netServiceDidPublish:(NSNetService *)ns 
{ 
    NSLog(@"Bonjour Service Published: http://%@", [ns hostName]); 
} 

你或許應該還檢查端口屬性,並將其包含在URL中,如果端口是不是默認該協議的其他東西(80 HTTP)

+0

我試過這個,'hostName'在'netServiceDidPublish'裏面是'nil'。我相信hostName屬性是用於'netServiceDidResolveAddress'中的客戶端,而不是服務器 – tmm1 2017-04-28 00:50:09