接收PCap库问题
PCap library issue with receive
所以我在PCap库的接收功能方面遇到了问题。
我在电脑外设置了一个echo服务器,它只需要接收一个数据包并将其翻转。因此,在我的应用程序中,我发送了一个数据包(工作正常),并尝试用pcap_next()接收响应数据包(来自echo服务器)。出于某种原因,即使Wireshark显示数据包在不到1ms的时间内被翻转,它也会等待1秒才能接收到pcap_next()的数据包。因此,当我发送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.
这是怎么回事?
也许您想要轮询,而不是拉取。只需拨打pcap_dispatch
或pcap_loop
,它就会尽快给您回电话并提供数据包。CCD_ 3是无效的,因为它启动调度循环并且在接收到第一个分组之后停止它。更多信息,请访问http://www.tcpdump.org/pcap.html
找到了解决方案。我需要将TX和RX放在两个独立的线程上。
RX线程永远做到这一点:
pcap_loop(handle, -1, got_packet, NULL);
然后我随时调用TX线程,它会这样做(并循环我需要的次数):
pcap_sendpacket(t, TxPacket, DataLen + 42);
这解决了问题。
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 如何重构类层次结构以避免菱形问题
- 基于boost的程序的静态链接——zlib问题
- C++格式化输出问题
- 接收PCap库问题