我们正在使用GKSession来设置游戏。这适用于2个设备,其中一个设备使用GKSessionModeServer和另一个GKSessionModeClient设置。
但是,只要我们有2个或更多客户端(3个设备; 1个主机和2个客户端),其中一个客户端将在某个时刻随机断开连接。没有调用错误处理程序(didFailWithError或connectionWithPeerFailed),只有服务器和客户端上的didChangeState。断开通常在一分钟内发生,有时甚至更少。
所有设备(2个iPhone和1个模拟器)都在同一个无线网络上。一个物理设备运行iOS6.0.1,另一个运行5.1.1,并且在连接到模拟器时都可以保持连接。只有3个设备(2个真实,1个模拟)才会出现问题。
任何帮助都会非常感激。
答案 0 :(得分:3)
我有同样的问题,但在我的应用程序中,当我连接第三个或第四个客户端(随机)时,会出现此问题。服务器获取断开连接事件,但客户端冻结。我注意到,几秒钟之后,连接的最后一个客户端始终是断开的。我无法理解如何解决问题,我发现了一个名为idea flight的应用程序,通过gamekit管理客户端/服务器连接,并且可以管理多达15个客户端(如GameKit文档中所指定),我测试了它并且它有效。这是3天,我在代码上失去了理智,我正在考虑切换到标准套接字通信,但我将失去蓝牙支持。
编辑:我找到了问题的原因。当网络由同时运行iOS 6和以前的iOS版本的设备组成时,会发生此问题。如果网络仅由运行iOS6的设备组成,或者仅由以前的版本组成,则一切都很好。更确切地说,这不是崩溃,但是卡住的客户端有一些等待互斥锁的线程,这意味着GameKit导致我们的应用程序陷入僵局。在Apple开发者论坛上阅读我已经知道有些用户直接向Apple报告了这个错误,但Apple没有回答这些问题。因此,目前,确保基于GKSession的应用程序安全运行的唯一方法是仅支持iOS 6或使用Bonjour,套接字和低级BlueTooth API从头开始编写网络通信系统。