私が「真の」ピアツーピアネットワークと呼ぶもの、つまり中間ルーター/ Wi- fi ネットワーク。私は、次の 3 つの高レベルのオプションがあると判断しました。
1) Apple の Multipeer Connectivity ライブラリ。近くにある他のデバイスの検出を可能にし、Apple が「リソース」と呼んでいるファイルを送信する機能も備えています。これを使ってプロトタイプを作成したところ、このフレームワークは大きなファイル (200 MB 以上) を送信するのが苦手であることがわかりました。速度が 200KB/s を超えることはめったになく、信頼性がありませんでした。私がこれまでに見たこのフレームワークの最速は、約 1 MB/秒でした。他の人の経験は、私がオンラインで見たものから私のものを反映しているようです.
2)簡単にグラブしてsNSNetService
する機能に加えて、 のディスカバリー サービス。これをプロパティと組み合わせて使用すると、「真の」ピアツーピア方式でデバイスに簡単かつ迅速に接続し、これらのストリームを使用してネットワーク経由でデータを送信できます。これはすばらしいことですが、ヘッダー データ (着信ファイル名、サイズ、場所など) をストリームにパックする必要があるため、入力ストリームと出力ストリームの処理は非常に複雑です。これは実際に機能していますが、実装に不安があり、すべてのベースをカバーできる方法がないように感じています。ある意味で、私はここで車輪を再発明しているように感じます.NSInputStream
NSOutputStream
NSNetServices
includePeerToPeer
3) 私の理想的な解決策NSNetService
は、最後の解決策と同様にピアを検出して接続する の機能を使用CocoaAsyncSockets
しますが、実際のファイル転送を処理するために実装することで、実績のある確立されたライブラリを使用できるようになり、逃げることもできます。使用の核心的な詳細NSInputStream
からNSOutputStream.
ここで私が抱えている問題は、デバイスが同じネットワークに接続されている場合、CocoaAsyncSockets はうまく機能しますが、真のピア ツー ピア ネットワークでは相互に接続できないことです。通常のイーサネット インターフェイス。真のピア ツー ピアは Apple の awdl インターフェイスを使用しているようです。これは、開発者フォーラムで読んだもので、通常のインターフェイスのようには使用できません (ソケットを接続するときにそのインターフェイスを指定しようとしましたが、機能しません)。
私はこれがかなり漠然としていることを知っていますが、誰か私に何か提案はありますか? NSNetService
Apple 開発者フォーラムの開発者の 1 人が、を使用してを介して提供されるソケットから独自のソケットを作成することに関する関連トピックについて言及しましたpublishWithOptions:NSNetServiceListenForConnections
が、彼は多くの情報を提供しておらず、それがどのように機能するかを理解できないようです。 .