1

iOS我创建的应用程序中XCode,我有一个主界面和一个函数委托:

- (BOOL)onUdpSocket:(AsyncUdpSocket *)sock didReceiveData:(NSData *)data withTag:(long)tag fromHost:(NSString *)host port:(UInt16)port
{
    NSString *infoString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];     
    return NO;
}

..我正在使用这个函数来监听传入的数据包。它第一次按预期运行,但在设备锁定/解锁序列之后,即在applicationWillEnterForeground调用之后,它似乎停止工作。

我怎么能叫它?

4

1 回答 1

0

很明显,您不会收到任何数据包,因为当您锁定设备时,应用程序进入后台模式,在后台模式下,您的应用程序无法接收来自互联网的任何数据包。您的问题有两种解决方案:

  1. 您必须使用数据包确认方法维护客户端-服务器数据包的发送/接收。当应用程序到达后台时,您的应用程序不会将 ack 发送到服务器,因此一旦应用程序再次请求,服务器就会知道发送数据。要让应用再次发送请求,请在 中再次发出请求applicationDidBecomeActive

  2. 只有当您的应用程序属于以下类型时,这种方法才有效 -

    • 音乐播放器应用
    • 导航应用
    • 网络电话应用
    • 报亭应用
    • 带有外部附件的应用程序

在这种情况下,您的应用甚至可以在后台发送/接收数据。有关更多详细信息,请查看此链接

于 2013-01-28T04:01:25.027 回答