iOS TCP套接字对某些客户端失去连接

3
我有一个应用程序,它会创建一个TCP套接字并从各种硬件接收数据。大多数客户都很满意,但是有些客户在一段时间后(可能是30秒或5分钟)会遇到TCP连接中断的问题。
我使用CFStreamCreatePairWithSocketToHost方法,并在“handleEvent”方法中处理所有事件。一些客户记录了失败情况,我收到了以下事件:
"ErrorOccurred" "The operation couldn’t be completed. Socket is not connected (Code = 57)"
经过几次成功的重新连接后,当我尝试重新连接时,我可能会遇到以下事件:
"ErrorOccurred" "The operation couldn’t be completed. No route to host (Code = 65)"
很容易解释为他们创建WiFi网络和流式传输数据的设备出现问题,但是有些客户还使用其他连接到相同设备的应用程序,并且这些应用程序不会失去连接。
我已经没有更改或改进来解决问题的想法了。我检查了可以使用的数据大小,并且从未超过1句话,因此不像任何缓冲区正在运行。我实际上还有一个小测试应用程序,除了连接到广播设备并记录接收到的数据外,什么都不做 - 这也会使这些客户失去连接。
我也尝试使用AsyncSocket,但是我遇到了同样的问题。我的头发正在变灰... :-) 感谢任何帮助。

附加信息:连接中断,代码为57(套接字未连接)。通常应用程序能够在一秒内重新连接,但有时重新连接会失败,并显示错误代码65(无法连接到主机)。这个错误(65)会重复一段时间,然后可能会更改为错误代码22(无效参数)。一段时间后,重新连接尝试会更改为错误代码54(对等方重置连接)。之后,它将继续以错误代码22和54的混合形式进行一段时间,最终以错误代码60(操作超时)结束。之后重新连接成功。 - user1057831
1个回答

1
大量的测试、记录和推测最终解决了问题。客户所需做的唯一事情就是降低波特率,问题便得以解决。
案件结案。

我有13个字节的数据要读写,波特率为9600,但我仍然遇到了与你相同的问题。有更好的方法吗? - Anurag Sharma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接