iPhone-どのようにデータ転送されP2P
-
23-08-2019 - |
質問
うことにより実施するP2Pアプリケーション.どのような転写カスタムNSObjectクラスのデータ間のデバイスることはできませんの姿がに"receivedData"メソッドが呼び出されるGKSession.
こんどろ風mikiモデルを作ってみを行
通常の接続とを示すダイアログボックスの仲間とともに
アプリを受信状態変化のためのピアに接続し、データを送信するすべての仲間(理想的にはこのとも言うべきそれぞれのピアを受け入れの接続に使用NSCoding方法
にreceivedDataい復NSData取得にNSObjectインスタンス
問題は、 セッション:ピア:didChangeState: 方法は少なくなってきているというもの。それだけで取得し、デバイスをタップ穴、"接続"ボタンをPeerPickerの警戒態勢にあるからです。
質問
時にはdidChangeState呼ばれることになり、ないと言ってもいい。ないごとに呼び出されるピアが接続されていますか。
時receivedData:という方法では、ないと言ってもいい。"というネーミングの確認の通知を受領のメッセージ(ハンドシェーク)からの選りすぐりの送信時に送信されるデータによるその他の仲間?
させます。
解決
以上の代わりの「マスター/スレーブ」として考え「ピアツーピア」。おそらく両側はGameKitに設定されており、その代表が割り当てられていました。接続を開始する一辺は、受信機が招待を受け入れており、それはものを超える送信を開始できるように接続されていることをGKPeerStateConnected
状態変化値を介して通知されます。
受信側では、しかし、誰かがdidReceiveConnectionRequestFromPeer
デリゲートメソッドを介してそれに話をしたいと、その最初の通知を取得します。それは回るし、それを受け入れるようにacceptConnectionFromPeer
を呼び出して、後で使用するためにセッションを保存します。その時から、それはreceiveData
法によりオーバー送られているものを取得します。
これを行うための最善の方法は、それぞれの側がでている状態どのような管理を少しステート・マシンを持っていることです。それはGKPeerStateConnected
イベントを得ているとき、送信者にのみ送信します。それはそれはそれはそれはデータを取得を開始する前に行う必要があるすべての設定を行うことができますので、接続要求を受け付けた後、受信機がconnected
状態に置かれます。
ネットワーク抽象はGKSession
受信機はその後、振り向くと、それはdidReceiveConnectionRequestFromPeer
に入った同じセッションインスタンスを使用し、バック(受信機からの応答と呼ばれる独自のreceiveData
メソッドを持つ必要があります)送信者への書き込みにそれを使用することができているので。
心に留めておくべき一つのことは、あなたがGameKitを通じて送信することができ、バッファ上の暗黙的なデータサイズの制限があるということです。あなたはそれが( - それは異なり、何らかの理由で、私は5Kと10Kの間に何かを得る)お使いのシステムのためにあるものを見つけるために実験することをお勧めします。あなたはチャンクにあなたのNSDataを分割してデータをデパケタイズ/パケットを管理するためのコードを持っているしたい場合があります。