c#-公开在函数中创建的对象
如何在回调函数中使用main()中创建的对象“communicator”?PacketCommunicator类没有构造函数c#-公开在函数中创建的对象,c#,.net,pcap,winpcap,pcap.net,C#,.net,Pcap,Winpcap,Pcap.net,如何在回调函数中使用main()中创建的对象“communicator”?PacketCommunicator类没有构造函数 class Program { //public static PacketCommunicator communicator = new PacketCommunicator(); - can't do this; PacketCommunicator constructor doesn't exist //public static PacketCom
class Program
{
//public static PacketCommunicator communicator = new PacketCommunicator(); - can't do this; PacketCommunicator constructor doesn't exist
//public static PacketCommunicator communicator = null; - this gives "Object reference not set to an instance of an object"
public static void Main(string[] args)
{
PacketCommunicator communicator = selectedDevice.Open(...)
communicator.ReceivePackets(0, PacketHandler);
}
// Callback function invoked by ReceivePackets for every incoming packet
private static void PacketHandler(Packet packet)
{
communicator.SendPacket(packet);
}
}
我正在使用的图书馆是。
基本上,我要做的是在一个接口上捕获数据包,对它们执行NAT,然后在另一个接口上发送。正如注释中提到的@SLaks,您可以使用lambda。这样通信器就不会失去作用域
communicator.ReceivePackets(
0, (packet) =>
{
//processing code goes here...
communicator.SendPacket(packet);
});
PCAP处理接收数据包的方式是将其放入一个连续的循环中,当你到达一个你想要关闭的时间时中断
有一个很好的方法,尽管他们只是报告数据包,而不是像你看起来那样发送数据包
在本例中,您将实例化通信器
PacketCommunicator communicator = selectedDevice.Open(...)
使用lambda表达式和closure我需要回调函数,因为我需要捕获每个数据包,并且在发送它们之前必须对它们进行处理(NAT)。@user1410908检查我的编辑,您可以轻松地将任何处理或其他方法调用放入lambda。即使使用lambda,我仍然会得到“对象引用未设置为对象的实例”运行时在“communicator.SendPacket(packet);”中@user1410908是否在using语句中?如果是这样,请将其取出。通信器不能为null,因为接收工作正常,并且调用了回调函数。