3

NSNetServiceでBonjourを使用して、iPhoneからサーバーを公開しています。すべて期待どおりに機能し、提供しているページなどを閲覧できます。ただし、iPhoneでは、ホスト名(つまり、「myDevice.local。」などのURL)を表示して、ブラウザで手動でアドレス指定します(bonjour検出サービスがないクライアントに便利です)。私の理解では、メソッド[myNetService hostName]を呼び出すと、そのアドレスが得られるはずです。ただし、この呼び出しは常にnilを返します。いくつかのフォーラムで、最初にサービスを解決する必要があると読みましたが、[myNetServiceresolve]と[myNetServiceresolveWithTimeout:10]の両方がデリゲートメソッドを呼び出します

- (void)netService:(NSNetService *)sender didNotResolve:(NSDictionary *)errorDict;

エラーで

{
    NSNetServicesErrorCode = -72003;
    NSNetServicesErrorDomain = 10;
}

これは明らかに、それがすでに解決されていることを意味します。繰り返しますが、私がサービスを使用できる間、これはすべて起こっています。また、ポート、ドメイン、およびサービスのタイプを取得できます。他の唯一の奇妙なことは、[myNetServiceアドレス]の呼び出しが空の配列を返すことです。

SDK3.1.3を使用しています。誰かが私が間違っている可能性があることを知っていますか?

4

3 に答える 3

5

この[[NSProcessInfo processInfo] hostName]方法は、次の2つの理由で役に立ちませんでした。

  • 携帯電話のデータがアクティブな場合、プロバイダーのドメインで奇妙なホスト名が返されます
  • WiFiしかない場合、ホスト名は問題ありませんが、すべて小文字です

http://iphoneappcode.blogspot.com/2012/05/how-to-get-device-ipaddess-in-iphone.htmlの次のコードが最適で、常に大文字と小文字を区別してローカルホスト名を返します。

+ (NSString *) hostname
{
    char baseHostName[256]; 
    int success = gethostname(baseHostName, 255);
    if (success != 0) return nil;
    baseHostName[255] = '\0';

#if !TARGET_IPHONE_SIMULATOR
    return [NSString stringWithFormat:@"%s.local", baseHostName];
#else
     return [NSString stringWithFormat:@"%s", baseHostName];
#endif
}
于 2013-06-03T17:59:10.417 に答える
3

公開したばかりのネットサービスを解決せずに、[[NSProcessInfoprocessInfo]hostName]を介してホスト名を取得できます。

于 2011-10-28T16:31:52.197 に答える
0

このリンクをチェックしてください:

これは、サービスを解決しようとしていたエラーを示しています。

https://developer.apple.com/library/IOs/documentation/Cocoa/Reference/Foundation/Classes/NSNetService_Class/index.html#//apple_ref/c/tdef/NSNetServicesError

于 2014-10-14T11:05:00.963 に答える