Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#-公开在函数中创建的对象_C#_.net_Pcap_Winpcap_Pcap.net - Fatal编程技术网

c#-公开在函数中创建的对象

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

如何在回调函数中使用main()中创建的对象“communicator”?PacketCommunicator类没有构造函数

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,因为接收工作正常,并且调用了回调函数。