3

私の iPhone アプリでは、bonjour サービスを公開し、次のデリゲート メソッドを使用しています。

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

「name」プロパティは正しいデバイス名「How's Testing」を返しています。ただし、Safari を使用して利用可能なサービスを検出する場合、名前は「hows-testing」です。サービスはhttp://hows-testing.local.:somePortNumberです。

公開された名前が NSNetService によって報告されている名前と異なるのはなぜですか? 公開されたサービスの実際の名前を表示するにはどうすればよいですか? なんらかの理由で、公開された名前をオブジェクトから取得する方法がないと仮定すると、どうすればそれを自分で決定できますか? デバイス名によるのはわかりますが、置換ルールはどうなっていますか?アポストロフィを削除し、スペースをダッシュ​​に置き換えます...他に何かありますか? 特殊文字はどうですか?

4

1 に答える 1

1

「hows-testing」はサービスの名前ではなく、コンピューターのホスト名だと思います。代わりに、hostName属性を調べます。

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

ポートがそのプロトコルのデフォルト (HTTP の場合は 80) 以外の場合は、おそらくポート属性も調べて、URL に含める必要があります。

于 2010-06-08T04:50:28.357 に答える