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

ここで起こっていると思うのは、実際には 1 つおきのパケットしかチェックしていないということです。

while ループの先頭で既に割り当てられているpacket = device.GetNextPacket();ため、2 番目は必要ありません。packet

これを試して、まだ例外が発生するかどうかを確認してください。

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

その例外はudpudp.ipv6またはudp.ipv6.TrafficClassが null であることを意味します。以下を確認する必要があります。

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