2

我正在使用 SharpPcap 来捕获数据包。

我正在尝试获取流量类别值,并且正在使用 udp.ipv6.TrafficClass.ToString()。

我遇到此异常的问题:

你调用的对象是空的。

private void packetCapturingThreadMethod()
{

   Packet packet = null;

   while ((packet = device.GetNextPacket()) != null)
   {
        packet = device.GetNextPacket();

        if (packet is UDPPacket)
        {
            UDPPacket udp = (UDPPacket)packet;

            MessageBox.Show(udp.ipv6.TrafficClass.ToString());
        }
   }
}
4

2 回答 2

4

我认为这里发生的事情是你实际上只检查每个其他数据包。

您不需要第二个packet = device.GetNextPacket();,因为packet它已经在您的 while 循环顶部分配。

试试这个,看看你是否仍然遇到异常:

private void packetCapturingThreadMethod()
{

   Packet packet = null;

   while ((packet = device.GetNextPacket()) != null)
   {
        if (packet is UDPPacket)
        {
            UDPPacket udp = (UDPPacket)packet;

            MessageBox.Show(udp.ipv6.TrafficClass.ToString());
        }
   }
}


如果您仍然收到异常,则很可能是因为您没有收到有效的 ipv6 数据包。

于 2010-04-21T20:25:33.387 回答
3

该异常意味着udp, udp.ipv6orudp.ipv6.TrafficClass为空。您需要检查:

if (udp != null && udp.ipv6 != null && udp.ipv6.TrafficClass != null)
{
    MessageBox.Show(udp.ipv6.TrafficClass.ToString();
}
于 2010-04-21T19:05:49.597 回答