基本的なクライアント/サーバー相互作用モデルを必要とするiPhoneアプリに取り組んでいます。このために、BonjourとNSNetServiceをNSNetServiceBrowserとともに使用して、同じネットワーク上の他のユーザーを検出します。私は多かれ少なかれ同じサンプルコードを持っているいくつかの異なるガイドに従いました。
関連するサーバーコード
...
serverName = [[UIDevice currentDevice] name];
netService = [[NSNetService alloc] initWithDomain:@"local."
type:@"_myservice._tcp."
name:serverName
port:port];
...
サービスは正常に公開されます。つまり、netServiceDidPublish:コールバックを取得します。
関連するブラウザコード
...
browser = [[NSNetServiceBrowser alloc] init];
[browser setDelegate:delegate];
[browser searchForServicesOfType:@"_myservice._tcp."
inDomain:@"local."];
...
これで、これらすべての結果が興味深いものになります。
- iPhoneで実行している場合、デバイスは独自に公開されたNSNetServiceのみを表示できます。
- 2台のiPhoneで実行しているため、どちらのデバイスも相手のNSNetServiceを認識できません。
- iPhoneシミュレーターで実行すると、独自のNSNetServicesを含むすべてのNSNetServicesが検出されます。
iPhoneシミュレータのスクリーンショット
私はここでちょっと途方に暮れています...シミュレーターは正確に期待どおりに動作しています。ただし、そうではないデバイスでは、同じWiFi上で2つの異なるiPhoneを相互に表示することはできず、自分自身のみを表示します。ここで何が起こっているのか分かりますか?