1

私はかなり大きな問題に遭遇し、運が悪かったので2か月間解決策を見つけようとしていました。私はそれをバグとして提出しましたが(https://bugzilla.xamarin.com/show_bug.cgi?id=4910)、ここの誰かが問題の原因に光を当てたり、作業を提案したりできることを望んでいました-その周り。

一言で言えば、エラーに遭遇するには:

  1. 2つのデバイス間に基本的な.Netソケット接続を作成します
  2. 少なくとも1つのデバイスでGameKit.GKSessionオブジェクトを作成して初期化します。

発生するのは、.NETソケットでのデータの転送が不安定になり、速度が遅くなって使用できなくなることです。私はさまざまなデバイスで多くのテストを実行しましたが(以下のリンクを参照)、すべてのデバイスに影響します(iPad 3の影響は最も少ないです)。iPhoneとWindowsPCの間でテストしましたが、まだ発生しています。MonoTouchのGameKitコードは、Socketコードに何らかの影響を及ぼしています。スプレッドシートからわかるように、速度が数ミリ秒から低下し、1MBから数分から永久に送信されます。GameKit.GKSessionがnullに設定されるとすぐに、ソケット上のバックログされたデータは再び自由に流れ、ソケットはもう一度正常に動作します。

問題を示すサンプルのWindowsおよびiOS/MonoTouchアプリ:https ://dl.dropbox.com/u/8617393/SocketBug/SocketBug.zip

さまざまなデバイス間でのテスト結果(PDFスプレッドシート): https ://dl.dropbox.com/u/8617393/SocketBug/SocketBugTestResults.pdf

4

2 に答える 2

1

この問題は、Appleがそれを回避することを決定したとしても非常に難しいようです:http://developer.apple.com/library/ios/#qa/qa1753/_index.html#//apple_ref/doc/uid/DTS40011315

明らかな文章は次のとおりです。「この変更は、Wi-Fiへの干渉を減らすために行われました。」

于 2012-10-19T14:16:23.337 に答える
0

この問題に遭遇した人を支援するために、この問題はGKSession.Availableがtrueに設定されている場合にのみ発生します。これは、デバイスを検出可能にするために必要ですが、接続を維持するためには必要ありません。これを念頭に置いて、一時的な回避策は、GKSession.Availableが必要な場合にのみtrueに設定され、接続が確立されるとすぐにfalseに設定される場合に使用できます。

私のシナリオでは、両方のデバイスのサーバーへのソケット接続があります。この接続を使用して、デバイスAからデバイスBにメッセージを送信し、Bluetoothを介して次の10秒間検出可能になるように要求します。メッセージが送信されるとすぐに、デバイスAはデバイスBの検索を開始し、デバイスBが見つかるとすぐに接続します。接続が確立されると(または接続なしで10秒が経過すると)、デバイスBは検出可能性をオフにし、ソケットは通常どおりに動作します。

私の状況では、これは問題に対する許容可能な(実際の修正は保留されていない)回避策です。

于 2012-07-23T11:24:44.320 に答える