1

所以我一直对 PCap 库的接收功能有疑问。

我设置了一个回显服务器(在我的 PC 之外),它只接收一个数据包并将其转过来。因此,在我的应用程序中,我发送了一个数据包(工作正常)并尝试使用 pcap_next() 接收响应数据包(来自回显服务器)。出于某种原因,它会等待整整 1 秒才能使用 pcap_next() 接收数据包,即使 Wireshark 显示数据包在不到 1 毫秒的时间内被翻转。因此,当我发送 1000 个数据包时,接收所有响应需要 1000 秒。

我不知道为什么会这样,所以我尝试切换到 pcap_loop()。显然现在它正在做一些更奇怪的事情。我发送了 1000 个数据包,并接收了 1000 个数据包,但不是按照我期望的顺序。

我期待这个(这是我在 Wireshark 上看到的):

Send packet #1
Receive packet #1
Send packet #2
Receive packet #2
etc.

但这是我真正得到的:

Send packet #1
Send packet #2
etc.
Wait 1 second
Receive packet #1
Receive packet #2
etc.

这里发生了什么?

4

2 回答 2

0

也许您想轮询,而不是拉动。只需致电pcap_dispatchpcap_loop,它会尽快给您回电。pcap_next效率不高,因为它启动一个调度循环并在收到第一个数据包后停止它。在http://www.tcpdump.org/pcap.html阅读更多内容

于 2011-06-10T20:33:28.773 回答
0

想出了解决办法。我需要在两个单独的线程上有 TX 和 RX。

RX 线程永远这样做:

pcap_loop(handle, -1, got_packet, NULL);

然后我随时调用 TX 线程,它会执行此操作(并且循环多次我需要):

pcap_sendpacket(t, TxPacket, DataLen + 42);

这解决了问题。

于 2011-06-14T23:02:10.453 回答