SharpPcap SendQueue不像示例中那样工作

本文关键字:工作 SendQueue SharpPcap | 更新日期: 2023-09-27 18:09:15

我尝试使用SharpPcap和SharpPcap中的示例从pcap文件(libpcap)发送数据包:http://sourceforge.net/p/sharppcap/code/ci/SharpPcap_4_1_0/tree/Examples/Example10.SendQueue/Example10.SendQueues.cs

我的问题是在第127行- int sent = winPcapDevice.SendQueue(squeue, SharpPcap.WinPcap.SendQueueTransmitModes.Synchronized);,当尝试执行此命令时,我得到异常对象引用未设置为对象的实例。我用调试器逐行检查,似乎一切都很好,直到这个命令,我的Pcap文件OK,所有的包都放在Queue

SharpPcap SendQueue不像示例中那样工作

在调试器中检查winPcapDevice的值。如果它是空的,那么这就是你的问题。否则,请发布堆栈跟踪,异常可能是从SendQueue内部抛出的。

要找出winPcapDevice显示为null的原因,请在调试器中跟踪您期望在此变量中结束的实例的生命周期:device变量,然后是devices数组。当您逐步执行代码时,检查其中的内容。

如果device不为空,但运行以下代码行:

var winPcapDevice = device as WinPcapDevice;

导致winPcapDevice为null,这意味着device持有的实例不能被强制转换为WinPcapDevice类型。基本上,它是一种不同的类型,也没有从WinPcapDevice继承。请参阅这篇msdn文章,了解"as"操作符如何工作。