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

时间:2014-01-05 23:43:21

标签: 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 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);
    }
}

我正在使用的库是Pcap.Net。 基本上,我要做的是在一个接口上捕获数据包,对它们执行NAT,并在另一个接口上发送它们。

1 个答案:

答案 0 :(得分:1)

正如评论中提到的@SLaks,您可以使用lambda。然后沟通者不会失去范围。

communicator.ReceivePackets(
    0, (packet) => 
        {
           //processing code goes here...
           communicator.SendPacket(packet);
        });

PCAP处理接收数据包的方式就是将其置于一个连续的循环中,当你想要关闭时,就会中断。

有一个很好的example of that here,虽然它们只是报告数据包,而不是像你看来那样发送它们。

在这个例子中,你将实例化通信器

PacketCommunicator communicator = selectedDevice.Open(...)