2012-08-30 43 views
0

我想在我的C++应用程序中使用WinPCap库进行“可靠的”UDP接收。所有我发现的例子,使用这个库来捕获然后继续。有没有什么办法(例子)如何配置PCap的流模式,只接收UDP和uder定义的端口或如何解决这个问题。在这个时候,我有可靠的UDP服务器能够接收0.5Gb/s。但是在速度较慢的PC上,我有一个数据包丢失,我可以在空灵中看到数据包,但在应用程序中看不到数据包使用WinPCap的UDP接收

感谢

VSM

+0

为什么?使用套接字API更简单,而WinPCap不会使它更加可靠。 – EJP

回答

0

我假设你已经尝试了所有的增加,你是能够处理数据包的数量的方法更加标准?比如增加recv缓冲区大小,加快每个数据报的处理速度,并使用IOCP来让问题带来更多的线索,或者如果您的目标是Windows 8,可以使用RIO?

如果是这样,那么使用WinPCap可能会工作,但它听起来像是一个极端的解决方案。

您需要做的是创建一个过滤器,以便您只捕获您感兴趣的数据报......该文档包含使用过滤器的示例。

+0

我有IOCP UDP服务器:http://www.gamedev.net/topic/533159-article-using-udp-with-iocp/。 – vsm

0

我从这里有服务器:http://www.gamedev.net/topic/533159-article-using-udp-with-iocp/。此代码与IOCP一起工作。它在WIndows XP上运行良好。接收0.5Gb/s没有问题。但是现在在Win7上是不可靠的。有时会出现数据包位置错误。 (我的设备生成udp数据包,并在其有效载荷中有PacketNumber - 随着每个数据包数量的增加。当发生错误时,我将所有数据包编号写入文件中,例如:10,11,290,13,14 ...)。对于IOCP和多线程,WinXP和Win7有任何已知的区别?或者你知道有IOCP处理的免费UDP服务器吗?

在程序循环中,我只将数据包添加到缓冲区并检查其数量。