我正在开发一个应用程序,在这个应用程序中,我需要确保即使网络崩溃,消息仍将可靠地、有序地、不受修改地到达目的地。我一直在使用TCP,直到现在,我还在使用以下策略:
我最近意识到,这是行不通的,因为send不能报告错误,表明遥控器没有收到消息(例如引用)。这里)。
我还了解到TCP连接可以在短暂的网络中断中存活下来,因为内核会缓冲数据包,直到连接在超时后被宣布死亡为止(引号)。这里)。
问题是:在客户机/服务器端(使用setsockopt和SO_KEEPALIVE选项)将超时时间调整得更高,从而使连接“永不超时”是否是一种可行的策略?我必须处理与内核的缓冲区填充相关的错误,但这应该比较简单。
还有其他的故障案例吗?
发布于 2017-08-07 08:41:42
如果两端没有显式断开连接,即使拔掉电缆,tcp连接也将永远保持打开状态。TCP中没有超时。
然而,我会使用(或设计) tcp之上的应用协议,使重新连接后恢复数据传输成为可能。例如,您可以使用HTTP。
这将是更稳定的,因为依赖于缓冲区,就像你说的,在某个时候耗尽缓冲区,但是缓冲区也会丢失,比如说停电。
https://stackoverflow.com/questions/45542546
复制相似问题