我正在编写一个通过以太网与外部设备通信的C应用程序。我正在使用SharpPcap 4.5.0版来实现这一点。
不幸的是,我不得不意识到一些传入的数据包被丢弃了。为了测试,我还在外部设备和我的计算机之间设置了一个交换机,它还记录每个数据包。在这个日志中,包是可见的。因此,我非常确定数据包确实被发送了(这不是外部设备的错误)。
public bool TryActivateChannel(uint channelNumber, out string message)
{
message = string.Empty;
devices[(int)channelNumber].Open(DeviceMode.Promiscuous);
devices[(int)channelNumber].OnPacketArrival += PacketArrived;
devices[(int)channelNumber].StartCapture();
return true;
}
public bool CloseChannel(uint channelNumber, out string message)
{
message = string.Empty;
devices[(int)channelNumber].OnPacketArrival -= PacketArrived;
devices[(int)channelNumber].Close();
return true;
}
private void PacketArrived(object sender, CaptureEventArgs e)
{
if (e.Packet.LinkLayerType != PacketDotNet.LinkLayers.Ethernet)
{
return;
}
else
{
inputQueue.Enqueue(e);
}
}
在这一点上,我真的很无助。我的代码有没有做错什么?这是已知问题吗?我在其他地方读到SharpPcap可以处理高达3mbit/s的数据。我离这个值很远,因此我不认为这是性能问题。
附录: