我创建了几个实验恰好TCP和UDP什么(多播)连接:当iOS应用程序确实进入后台
设置1:我创建了一个TCP发送者的应用程序和TCP接收器应用程序。
在这个实验中,我开始iOS设备和另一iOS设备上的TCP接收器上的TCP发送者。然后两者都被验证已经建立连接并发送和接收数据。然后,我将TCP Receiver应用程序置于后台。 TCP Sender应用程序显示连接丢失并崩溃(是的,我是这样想的)。
设置2:我创建了一个UDP发件人的应用程序和一个UDP接收机应用。
同上,我开始iOS设备和另一iOS设备上的UDP接收机应用的UDP发件人应用程序。在订阅了多播组的UDP Receiver应用程序等上,我验证了UDP Receiver应用程序正在从UDP Sender应用程序发出的多播组接收数据。然后我将UDP Receiver应用放到后台。 2分钟后,我得到UDP Sender应用程序发送另一个数据。然后我完全退出UDP Sender应用程序并关闭该iOS设备。然后等待另外2分钟或更长时间,然后从后台调出UDP Receiver应用程序。 UDP Receiver应用程序确实收到了UDP Sender应用程序在终止之前发出的数据。
在Setup1文件,我的解释是,因为TCP是一个面向连接。
在设置2,我明白了UDP是无连接的。任何解释为什么setup2它在我的经验中工作的方式? (仍然会收到即使在后台模式数据)
顺便说一句,我假设当你说“背景”你的意思是“暂停”,因为你没有提到试图运行启用背景应用程序(VOIP,音乐等),除非你做一些事情特殊情况下,背景是您的应用的暂时状态,在进入后台后会很快暂停。查看Apple iOS应用程序生命周期文档。 – smparkes 2012-01-28 17:41:05
优秀的解释!我的想法与你的解释是一致的,(+1票)技术文章非常确认。是的,我的意思是暂停而不是背景。仅供参考:我的TCP发送器因为不断向接收器发送数据流而迅速崩溃。 – user523234 2012-01-28 23:03:01
这将使意义:如果您发送的数据的目的地不接收,并与主线程阻塞调用做到这一点,iOS版将看到您的应用程序不响应,并杀死它。 TCP连接可能仍然正常;它有流量控制来管理缓冲区,但是你不允许阻塞主线太久。 – smparkes 2012-01-29 00:23:41