0

我有一个典型的GKSessionModeServer/GKSessionModeClient设置。

当服务器拒绝与 的客户端连接尝试时denyConnectionFromPeer:,将调用客户端的session:connectionWithPeerFailed:方法,但随后它会收到GKPeerStateConnected带有我服务器的 peerID 的状态更改。换句话说,客户端认为连接成功,而服务器没有。

这似乎与常识和文档不一致connectToPeer:withTimeout:,其中说

如果与远程对等点的连接成功,session:peer:didChangeState:则为它成功连接到的每个对等点调用委托方法。如果连接失败或您的应用程序取消连接尝试,会话将调用委托的session:connectionWithPeerFailed:withError:方法。

我知道这并不是说在连接失败的情况下不会调用状态更改回调,但是从客户端的角度来看,最终结果是失败的连接似乎会导致连接成功。

我紧紧抓住稻草尝试cancelConnectToPeerconnectionWithPeerFailed回调中调用,但没有结果。

客户端可以通过忽略 next 来解决这个问题GKPeerStateConnected,但这很麻烦,并且在服务器再次开始接受连接时使重新连接变得复杂。

那么为什么客户端会话不能理解它已经结束了呢?

4

1 回答 1

1

我自己设计了相同类型的应用程序(GKSessionModeServer/GKSessionModeClient)。当您拒绝与对等点的连接时,它将触发session:peer:didChangeState:委托,并将 GKPeerConnectionState 参数设置为GKPeerStateDisconnected。你只需要在你的代码中正确处理这个问题——我从来没有遇到过任何问题。

于 2011-03-26T07:28:53.540 回答