1

我遇到了一个相当大的问题,并且一直试图找到解决方案 2 个月,但没有运气。我已将其作为错误提交(https://bugzilla.xamarin.com/show_bug.cgi?id=4910),但希望这里有人可以阐明问题的原因,或提出工作建议-大约。

简而言之,遇到错误:

  1. 在两个设备之间创建基本的 .Net 套接字连接
  2. 在至少一个设备上创建并初始化 GameKit.GKSession 对象。

发生的情况是 .NET 套接字上的数据传输变得不稳定且太慢而无法使用。我在不同的设备上进行了许多测试(见下面的链接),它影响了所有设备(iPad 3 影响最小)。我已经在 iPhone 和 Windows PC 之间进行了测试,它仍然会发生。MonoTouch 的 GameKit 代码在某种程度上影响了 Socket 代码。正如您从电子表格中看到的那样,速度从发送 1 MB 的几毫秒下降到几分钟到永远。一旦 GameKit.GKSession 设置为 null,套接字上的任何 backedlogged 数据都会再次自由流动,并且套接字会再次正常运行。

演示问题的示例 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

这个问题似乎很难,即使苹果决定绕过它: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 发送消息,要求它在接下来的 10 秒内通过蓝牙变得可发现。消息一经发送,设备 A 就开始寻找设备 B,并在找到后立即连接。一旦建立连接(或 10 秒后没有连接),设备 B 将关闭可发现性,并且套接字正常运行。

在我的情况下,这是一个可以接受的(等待没有真正解决)问题的解决方法。

于 2012-07-23T11:24:44.320 回答