【问题标题】:Using WinPCap for UDP receiving使用 WinPCap 进行 UDP 接收
【发布时间】:2012-08-30 07:02:36
【问题描述】:

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

谢谢

vsm

【问题讨论】:

  • 为什么?使用 Sockets API 更简单,WinPCap 并没有让它变得更可靠。

标签: udp winpcap


【解决方案1】:

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

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

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

【讨论】:

【解决方案2】:

我有来自这里的服务器: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 服务器吗?

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    • 2018-03-01
    • 2020-07-03
    • 2011-12-07
    相关资源
    最近更新 更多