如何在回调函数中使用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,并在另一个接口上发送它们。
答案 0 :(得分:1)
正如评论中提到的@SLaks,您可以使用lambda。然后沟通者不会失去范围。
communicator.ReceivePackets(
0, (packet) =>
{
//processing code goes here...
communicator.SendPacket(packet);
});
PCAP处理接收数据包的方式就是将其置于一个连续的循环中,当你想要关闭时,就会中断。
有一个很好的example of that here,虽然它们只是报告数据包,而不是像你看来那样发送它们。
在这个例子中,你将实例化通信器
PacketCommunicator communicator = selectedDevice.Open(...)