2012-07-08 27 views
1

我遇到了一个相当大的问题,并试图找到一个解决方案2个月,现在没有运气。我已经提交它作为一个错误,(https://bugzilla.xamarin.com/show_bug.cgi?id=4910),但希望也许这里的某个人能够阐明问题的原因,或者提出解决方法。同时使用套接字和GameKit。激烈的插槽速度降低

概括地说,遇到错误:

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

什么发生在.NET套接字上的数据传输变得不稳定和太慢,无法使用。我已经在不同的设备上执行过很多测试(请参阅下面的链接),它会影响所有设备(iPad 3影响最小)。我已经在iPhone和Windows PC之间对它进行了测试,但它仍然存在。 MonoTouch的GameKit代码在某种程度上影响了Socket代码。 正如您从电子表格中看到的那样,速度从几毫秒下降到几分钟就可以发送到永远。 只要将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

你确定这是MonoTouch,而不是GameKit本身? – jonathanpeppers 2012-07-08 14:40:08

+0

我真的不知道。他们对我来说都是黑箱子。两者之间有一些冲突。我在互联网上搜索了Objective C中与GameKit有类似问题的其他人,但没有发现任何东西。 :-( – Dermot 2012-07-08 23:27:13

回答

0

协助与遇到这个问题的人,该问题仅表现当GKSession.Available设置为true时。这是设备被发现所必需的,但不能保持连接。考虑到这一点,可以在需要时将GKSession.Available设置为true并在连接完成后立即设置为false的情况下使用临时解决方法。

在我的方案中,我在两台设备上都有一个到服务器的套接字连接。我使用此连接从设备A向设备B发送消息,要求它在接下来的10秒内通过蓝牙发现。一旦发送消息,设备A就开始寻找设备B,并在找到它时立即连接。连接建立后(或者10秒钟没有连接),设备B关闭发现性,并且插座表现正常。

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