2

如何在回调函数中使用 main() 中创建的对象“通信器”?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,然后在另一个接口上发送它们。

4

1 回答 1

1

正如评论中提到的@SLaks,您可以使用 lambda。那么通信器就不会失去作用域。

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

PCAP 处理接收数据包的方式是将其置于连续循环中,当您遇到想要关闭的时间时中断。

这里有一个很好的例子,虽然他们只是报告数据包,而不是像你看起来的那样发送它们。

在此示例中,您将因此实例化通信器

PacketCommunicator communicator = selectedDevice.Open(...)
于 2014-01-05T23:54:58.607 回答