Pcap.处置()关闭我的应用程序没有任何错误
本文关键字:应用程序 任何 错误 我的 处置 Pcap | 更新日期: 2023-09-27 18:07:20
我使用Pcap.Net
获取Pcap
文件并通过我的机器Network Adapter
传输所有它的数据包。因此,为了做到这一点,我使用的代码示例发送数据包使用发送缓冲区:
class Program
{
static void Main(string[] args)
{
string file = @"C:'file_1.pcap";
string file2 = @"C:'file_2.pcap";
// Retrieve the device list from the local machine
IList<LivePacketDevice> allDevices = LivePacketDevice.AllLocalMachine;
// Take the selected adapter
PacketDevice selectedOutputDevice = allDevices[1];
SendPackets(selectedOutputDevice, file);
SendPackets(selectedOutputDevice, file2);
}
static void SendPackets(PacketDevice selectedOutputDevice, string file)
{
// Retrieve the length of the capture file
long capLength = new FileInfo(file).Length;
// Chek if the timestamps must be respected
bool isSync = false;
// Open the capture file
OfflinePacketDevice selectedInputDevice = new OfflinePacketDevice(file);
using (PacketCommunicator inputCommunicator = selectedInputDevice.Open(65536, PacketDeviceOpenAttributes.Promiscuous, 1000))
{
using (PacketCommunicator outputCommunicator = selectedOutputDevice.Open(100, PacketDeviceOpenAttributes.Promiscuous, 1000))
{
// Allocate a send buffer
using (PacketSendBuffer sendBuffer = new PacketSendBuffer((uint)capLength))
{
// Fill the buffer with the packets from the file
Packet packet;
while (inputCommunicator.ReceivePacket(out packet) == PacketCommunicatorReceiveResult.Ok)
{
//outputCommunicator.SendPacket(packet);
sendBuffer.Enqueue(packet);
}
// Transmit the queue
outputCommunicator.Transmit(sendBuffer, isSync);
inputCommunicator.Dispose();
}
outputCommunicator.Dispose();
}
//inputCommunicator.Dispose();
}
}
}
为了发送数据包,Pcap.Net
提供了两种方式:
发送缓冲区。
使用
SendPacket()
发送每个数据包
现在完成后发送我的2个文件(如在我的例子中),我想使用Dispose()
来释放资源。
当使用第一个选项时,所有工作都很好,这完成了处理我的2个Pcap
文件。
当使用第二个选项SendPacket()
(目前在我的代码示例中,这是作为一个注释)第一个文件完成后,我的应用程序正在关闭,而不是到达第二个文件。我也尝试在Console Application
和WPF
和在两种情况下相同的结果。使用UI
(WPF)我的应用程序GUI
只是关闭没有任何错误。
有什么建议吗?
当您使用using
关键字时,这意味着您在作用域的末尾隐式地调用Dispose()
。
如果您显式地调用Dispose()
,这意味着您在同一个实例上两次调用Dispose()
,这很可能导致程序崩溃。