2

しばらくの間、私は GameKit で遊んでいましたが、今は非常に困難に直面しています。

Bluetooth 経由でより大きなファイル (1 ~ 2 MB) を送信します。すでにパケットを用意しています (それぞれ約 8kB)。

私のアプリは、次のスキームで説明されているように機能します。

iPhone - sending header: file divided into 25 parts
iPod - received header: OK I got it waiting for 25 parts
iPhone - sending part #1
iPod - received part #1 send next
iPhone - sending part #2
iPod - received part #2 send next
...
iPhone - sending part #24
iPod - received part #24 send next
iPhone - sending part #25
iPod receiving part #25 processing file

以下を使用して、ファイル部分とメッセージ (配信の確認) の両方を送信します。

[mSession sendData:data toPeers:mPeers withDataMode:GKSendDataReliable error:nil];

および受信データ:

- (void)receiveData:(NSData *)data fromPeer:(NSString *)peer inSession: (GKSession *)session context:(void *)context

Bluetooth 伝送中に発生する可能性のある問題にどのように対処するかを知りたいです。ドキュメントを参照しても、データが配信されたかどうかについて、GKSessionDelegate から情報が得られません。

90% の場合、転送は正常に機能しますが、突然停止し、再接続またはアプリの再起動なしでは続行されないことがあります。

1秒以内に応答が得られない場合にデータを再設定する簡単な解決策を発明しようとしました:

-(void)sendAgain {
    [self sendData:bufor];
}
-(void)sendData:(NSData *)data {
    bufor = [data retain];

    timeoutTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(sendAgain) userInfo:nil repeats:NO];

    [mSession sendData:data toPeers:mPeers withDataMode:GKSendDataReliable error:nil];
}

送信者がファイル部分の配信成功の確認を受信した場合、timeOutTimer は無効になります。しかし、実際にこのソリューションを実装すると、さらに多くの問題が発生します。

デバイスは机の上で隣り合っています。

デバイス間の「未配信」データの問題にどのように対処していますか? これは単なるツールですが、ゲームの開発中にどのように煩わされるのでしょうか?

ちなみに、短いチャット メッセージを送信しても問題は発生せず、同じ方法を使用しています。

実際、接続が失われることはめったにありません。データが空中で失われるのが好きなだけです。データのサイズが約 8kb になるようにパーツを既に分割しているため、画像の転送が非常に遅くなります。

4

2 に答える 2

2

GameKit フレームワークは、私が取り組んでいるゲームの単純なデータ交換についてさえ、現時点ではあまり信頼できません。大規模なデータの送信には使用しません。頭痛の種です。

于 2009-12-16T04:53:01.070 に答える
1

私は「それ」と「refulgentis」の両方に同意します。GKでこれを行うと、信頼性の低い実行が求められます。BonjourとwiFiを介してこれを設定するか、各ユーザーに中央のオフラインソースからコンテンツをダウンロードさせることをお勧めします。大きなファイルをあるデバイスから別のデバイスに移動する必要がある設計の場合は、デバイス間で大きなファイルを転送するのではなく、一方の側でアップロードしてもう一方の側でダウンロードすることをお勧めします。

于 2010-09-22T17:02:19.227 に答える