gpt4 book ai didi

iphone - CocoaAsyncSocket 在后台后不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:55:02 27 4
gpt4 key购买 nike

我有一个 AsyncSocket 实例,我一直在 iPad 上用作服务器,然后在另一个充当客户端的 iPad 上运行 AsyncSocket 套接字。我拥有在客户端和服务器之间交换数据所需的所有代码——没有任何问题。

我遇到的问题是一切正常,但在我的应用程序的错误测试期间,我注意到一个特别奇怪(且令人恼火的问题):

如果我关闭服务器 iPad(此时没有在服务器上触发套接字的委托(delegate)),那么客户端将断开连接(并进入我在其中不断重试的循环)。令人恼火的是,即使服务器恢复正常,客户端仍然无法连接到它。事实上,即使我从头开始重新启动客户端,它仍然无法连接到服务器。我必须重新启动服务器应用,以便客户端能够再次连接。

奇怪的是,只有当服务器实际从顶部的按钮“关闭”(即进入待机状态)时,才会触发此错误。如果我只是使用主页按钮将应用程序发送到后台,那么客户端仍然保持与服务器的连接:只有当设备断开连接时,客户端才会收到断开连接委托(delegate)消息并断开连接,然后拒绝重新连接。同时,服务器对此完全无视,根本不会触发任何委托(delegate)方法。

概括一下我的问题:

  • 当使用 iPad 顶部的按钮将设备置于待机状态时,AsyncSocket 服务器实例究竟发生了什么?
  • 为什么没有触发任何委托(delegate)方法,但所有已连接的客户端都断开了连接?
  • 再次打开设备时会发生什么情况?
  • 为什么客户端无法重新连接?

最佳答案

我设法找到了这个问题的解决方案,所以我会在这里分享:-

在我的服务器类中,我添加了以下内容:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidBecomeActive) name:UIApplicationDidBecomeActiveNotification object:nil];

然后我添加了以下方法,使套接字再次开始监听:

- (void)applicationDidBecomeActive {
NSError *error;
if (![socket acceptOnPort:kPORT error:&error])
{
// error code
}
}

当服务器进入后台时仍然没有办法阻止客户端断开连接,所以我只是让它们循环直到服务器再次可用,appEnteredForeground 方法将确保服务器再次开始监听一旦 iPad(或 iPhone,我猜)再次打开。

关于iphone - CocoaAsyncSocket 在后台后不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7968548/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com