假设我使用System.Net.Sockets.TcpClient连接到某人。我向他们发送消息,然后我立即调用TcpClient.Close();是否保证其他客户收到消息?此外,在大多数TCP实现中,这是真/假吗?
答案 0 :(得分:1)
弗拉德的评论是正确的 - 交付不保证。
假设已建立与对等方的TCP连接。发送操作只是将数据复制到操作系统中的网络堆栈,操作系统负责发送它。你调用操作关闭。操作系统不会停止发送以前的数据。 OS推迟套接字关闭直到发送数据。从应用的角度来看它是透明的。
但可能会发生错误。对等体可能崩溃,网络可能发生中断或其他情况。虽然如果没有收到TCP ACK,操作系统会尝试重新传输数据,但重新传输可能会一次又一次地失败,直到操作系统放弃为止。这种通用机制在所有实现TCP协议的操作系统中都是相同的。
如果您需要保证交付,则必须实施应用程序级别机制以确认收到的数据。