我遇到了一个非常大的问题,并且一直试图找到一个解决方案2个月,但没有运气。我已经把它作为一个bug提交了,(https://bugzilla.xamarin.com/show_bug.cgi?id=4910)但希望这里有人能够解决问题的原因,或建议解决问题。
简而言之,遇到错误:
发生的事情是.NET套接字上的数据传输变得不稳定且太慢而无法使用。我在不同的设备上进行了很多测试(见下面的链接),它影响了所有设备(iPad 3影响最小)。我在iPhone和Windows PC之间进行了测试,但仍然存在。 MonoTouch的GameKit代码以某种方式影响Socket代码。 正如您从电子表格中看到的那样,速度从几毫秒减少到1 MB到几分钟到永久。 一旦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
答案 0 :(得分:1)
这个问题似乎很难,即使苹果决定绕过它:http://developer.apple.com/library/ios/#qa/qa1753/_index.html#//apple_ref/doc/uid/DTS40011315
揭示的句子是这样的:“这一改变是为了减少对Wi-Fi的干扰。”
答案 1 :(得分:0)
为了帮助遇到此问题的任何人,只有当GKSession.Available设置为true时,问题才会出现。这是设备可被发现所必需的,但不是为了保持连接。考虑到这一点,可以使用临时解决方法,其中GKSession.Available仅在需要时设置为true,并在连接完成后立即设置为false。
在我的场景中,我在两台设备上都有一个到服务器的套接字连接。我使用此连接从设备A向设备B发送消息,要求它在接下来的10秒内通过蓝牙发现。一旦发送消息,设备A就开始寻找设备B并在它找到它时立即连接。一旦建立连接(或者在没有连接的情况下经过10秒),设备B将关闭可发现性并且套接字正常运行。
在我的情况下,这是一个可接受的(等待没有真正修复)解决问题的方法。