C#中如何验证TCP数据包是否收到ACK?使用阻塞/非阻塞方法发送一些tcp数据后,例如:Socket.Send()或Socket.SendAsync()我怎么知道我的数据收到了ACK消息?.NET可以知道TCP数据是否已成功发送吗?唯一可以确定的方法是实施某种应用程序级别的确认。TCP级别的“ACK”数据包根本不会暴露给应用程序级别,因此您必须使用更多。你让另一端回应它。即使TCP已经Acked,如果接收端在处理消息并对其采取行动之前终止(出于好或坏的原因),你仍然不知道,所以唯一的办法就是让对方告诉你。无法从.net的类库中获取此信息。当我开始在C#中使用这个端口扫描器时,我有同样的警告。我已经使用libpcap的.NET包装器(在安装相应的驱动程序之后)SharpPcap(http://sourceforge.net/projects/sharppcap/)来获取此类信息。ACK包通过SharpPcap的接口获取(透明调用原生libpcap接口)。我的应用是NScannerPortScanner/Sweeper,代码可以在codeplex找到,参考我上面库的简单使用(http://nscanner.codeplex.com/)。我希望我有所帮助。“我正试图专注于你如何知道你的数据何时被连接的另一端接受。”我认为您需要了解要实现的应用层协议的类型以及它如何影响应用程序性能。以HTTP为例来说明“Streaminglike”协议。服务器向客户端发布数据流。没有任何额外的应用层“ACK”,服务器并不真正关心他的流何时以及如何到达。这在高延迟链接上非常有效。现在将其与SMB进行比较!数据被分成块而不是流文件。每个成功传输的数据块都在应用层上进行处理。这给了你更多的控制权,然而,它有效地杀死了WAN网络上的协议(查看“带宽延迟产品”)。考虑到这一点,您可以为自定义协议设计自己的设计。我推荐使用Pcap.Net。您可以使用C#中的库轻松嗅探数据包,然后轻松检查数据包值。您还可以轻松构建和发送数据包。如果您确实需要了解TCP连接的数据包级别详细信息,那么除了创建用于发送的TCP套接字之外,您还需要应用程序使用winpcapAPI来查看原始流量。您可以安装过滤器以仅接收与确定远程端的特定IP、端口组合相关的数据包。有一些项目为libpcap创建.NET包装器,例如这里的TCP层将继续重新发送数据包,直到收到成功的ACK。发送将阻塞,直到发生这种情况-SendAsync不会阻塞,您可以在TCP层处理发送数据包的同时继续处理其他内容。以上是C#学习教程:C#中如何验证一个TCP包是否收到ACK?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
