虽然 TCP 是一个提供重传和确认机制的可靠协议,但我认为它不是 100% 可靠的,因为 send() 的成功返回并不能确保数据已经到达目标端点,仅意味着数据被复制到内核缓冲区。
应用程序是否有任何机制可以知道数据是否已成功到达目的地?
一种可能的解决方案是在应用层中建立一些确认机制?
TCP 是可靠的,因为发送的消息要么
使用 TCP,接收到的消息绝不应该是乱序或丢失中间消息。
要区分情况 1 和 2,您应该实现确认机制。还可以确保优于 CRC 消息完整性的一个好主意是发回传入消息的 MD5 或其他散列。
您可以构建自己的应用程序,由接收者向发送者回复成功消息,如果没有收到成功消息,则根据需要重新发送。
在 Java 中,JMS 做这项工作,我相信一些现有的库应该在 C 中做同样的事情。
当然 TCP 是可靠的协议,如果你想知道通过网络端口发送和接收的数据,使用 Wireshark 软件捕获发送和接收的数据。通过wireshark,您可以追踪数据包。