我想在我的C ++应用程序中使用WinPCap库进行“可靠”的UDP接收。我找到的所有示例,使用此库进行捕获然后进行处理。有没有办法(示例)如何配置PCap用于流模式并仅接收UDP和uder定义的端口或如何解决此问题。在这个时候,我有可靠的UDP服务器能够接收0.5Gb / s。但是在速度较慢的PC上我丢失了数据包,我可以在空灵中看到数据包,但在应用程序中却看不到。
感谢
VSM
答案 0 :(得分:0)
我假设您已经尝试过所有更标准的方法来增加您能够处理的数据报数量?比如增加recv缓冲区大小,加快每个数据报的处理速度,使用IOCP让你可以为问题带来更多的线程,或者如果你可以针对Windows 8使用RIO?
如果是这样,那么使用WinPCap可能会有效但听起来有点极端解决方案。
您需要做的是创建一个过滤器,以便您只捕获您感兴趣的数据报......文档包含使用过滤器的示例。
答案 1 :(得分: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服务器?
在程序循环中,我只将数据包添加到缓冲区并检查它们的数字。