GCDAsyncSocket (7.5.0) を使用した非常に単純な TCP クライアント/サーバーの実装がありNSNetService
、サービス検出に使用しています。これはローカルのwifiネットワークでのみ使用されており、2年間問題なく動作します(私はGCDAsyncSocketを適切に使用しています)。
...クライアントとサーバーが接続する Wi-Fi ネットワークを提供するアクセス ポイントとして 3 番目の iOS デバイスを使用するまでは。
3 番目の iOS デバイスが Bluetooth 経由で接続を共有することにより、クライアントとサーバーの両方に接続する場合も同様です。
サービスの検出は問題ありませんが、IP アドレスとポートを取得すると、接続できず、次のエラーが発生します。
Error Domain=NSPOSIXErrorDomain Code=64 "Host is down" UserInfo={NSLocalizedDescription=Host is down, NSLocalizedFailureReason=Error in connect() function}
IPv4 と IPv6 に制限してみました (どちらもサービス ディスカバリーによって提供されます)。また、GCDAsyncSocket リポジトリの ipv6 git ブランチとさまざまなパラメーターを使用してみました。
私の主な質問は次のとおりです。Wi-FiまたはBluetooth iOSアクセスポイントを介して単純なTCP接続を確立できますか?
NSNetService
2 つ目の質問は、単純な TCP 接続ではなく、サービス検出が機能するのはなぜですか? プロトコルが比較できないことはわかっていますが、それでも混乱します。