C#TCP服务器不可靠,丢弃过时的缓冲消息

时间:2014-06-13 06:04:46

标签: c# sockets tcp buffer

我的目标是构建一个c'èTCP服务器,该服务器必须传输本应通过UDP传输的数据,遗憾的是这不是我的选择。

服务器必须传输恒定的实时数据流,例如:一系列数字 0 1 2 3 4 5 etc...,客户端必须只显示最后一个。 如果一切顺利,客户端将收到每个号码,但如果由于某种原因数据包丢失,我想检测它而不是再次发送,而是发送最新号码。

所以问题是:是否有可能在C#中检测TCP数据包丢失并清除缓冲区而不刷新?

感谢您的时间! Fabio Iotti

更新 删除丢失的所有新数据包也没问题!

更新 同时检测ack数据包就足够了。

1 个答案:

答案 0 :(得分:4)

“否”。 1

在应用程序级别TCP永远不会“丢失”数据包。它将继续重试(在TCP /传输级别),以便应用程序只能看到完整而准确的流 - 因此TCP是“可靠”协议。

如果丢弃的数据包太多,流将最终超时,但这与检测到连接失败的程度有关。 (“Heartbeats”和吞吐量监控可用于检测慢/失败或高延迟连接,但仅限于高级别。)


1 Wireshark这样的工具可以在较低的抽象级别上使用TCP流,但这通常不适合(或可行)应用程序代码,并且不会在[ .NET] TCP / Stream API。