1

我想在我的 C++ 应用程序中使用 WinPCap 库进行“可靠”的 UDP 接收。我找到的所有示例都使用此库进行捕获然后处理。有什么方法(示例)如何将 PCap 配置为流模式并仅在用户定义的端口上接收 UDP 或如何解决此问题。在这个时候,我有可靠的 UDP 服务器能够接收 0.5Gb/s。但是在较慢的 PC 上,我丢失了一个数据包,我可以在 ethereal 中看到数据包,但在应用程序中看不到数据包。

谢谢

虚拟机

4

2 回答 2

0

我假设您已经尝试了所有更标准的方法来增加您能够处理的数据报的数量?诸如增加 recv 缓冲区大小、加快您对每个数据报的处理速度以及使用 IOCP 允许您带来更多线程来解决问题或使用 RIO(如果您可以针对 Windows 8)之类的事情?

如果是这样,那么使用 WinPCap 可能会起作用,但这听起来有点极端。

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

于 2012-09-02T06:28:39.980 回答
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 服务器吗?

在处理循环中,我只将数据包添加到缓冲区并检查它们的数量。

于 2012-09-04T13:21:48.540 回答