如何修复变量声明错误?

问题描述 投票:0回答:1

我是一个编程新手。我正在尝试捕获 udp 以太网数据包,我使用以下代码:

using PcapDotNet.Packets.IpV4;
using PcapDotNet.Packets.Transport;
using PcapDotNet.Packets;
//.. System usings


namespace FirstLesson
{
    class Program
    {
        static void Main(string[] args)
        {
            Packet wpacket;

            // wpacket = received packet

            UdpDatagram udp = null;
            TcpDatagram tcp = null;
            Datagram datagram = null;

            IpV4Datagram ip4 = wpacket.Ethernet.IpV4;
            if (ip4.Protocol == IpV4Protocol.Udp)
            {
                udp = ip4.Udp;
                datagram = udp.Payload;
            }
            if (ip4.Protocol == IpV4Protocol.Tcp)
            {
                tcp = ip4.Tcp;
                datagram = tcp.Payload;
            }
            if (null != datagram)
            {
                int payloadLength = datagram.Length;
                using (MemoryStream ms = datagram.ToMemoryStream())
                {
                    byte[] rx_payload = new byte[payloadLength];
                    ms.Read(rx_payload, 0, payloadLength);
                }
            }
        }
    }

    public sealed class Packet : IList<byte>, 
        ICollection<byte>, 
        IEnumerable<byte>, IEnumerable, 
        IEquatable<Packet> 
    { 
        private readonly byte[] _data; 
        private readonly DateTime _timestamp; 
        private readonly IDataLink _dataLink; 
        private bool? _isValid; 
        private EthernetDatagram _ethernet; 
        private IpV4Datagram _ipV4;
    }

它给出了以下错误:

错误 CS0165 使用未分配的局部变量“wpacket” 我不知道如何初始化 wpacket 变量。我尝试了 =null 但它不能正常工作。 请帮我修复代码。 注:我已附上“班级数据包”

public sealed class Packet : IList<byte>, ICollection<byte>, IEnumerable<byte>, IEnumerable, IEquatable<Packet>

希望代码可以工作!

c# visual-studio-code variables declaration
1个回答
0
投票

初始化数据包意味着实际上在其中构建了一些东西。将其等于“null”根本不起作用。您要做的就是构造一个新的“Packet”类。

检查此代码:

static void Main(string[] args)
{
    Packet wpacket = new Packet(); 

    UdpDatagram udp = null;
    TcpDatagram tcp = null;
    Datagram datagram = null;

    IpV4Datagram ip4 = wpacket.Ethernet.IpV4;
    if (ip4.Protocol == IpV4Protocol.Udp)
    {
        udp = ip4.Udp;
        datagram = udp.Payload;
    }
    if (ip4.Protocol == IpV4Protocol.Tcp)
    {
        tcp = ip4.Tcp;
        datagram = tcp.Payload;
    }
    if (null != datagram)
    {
        int payloadLength = datagram.Length;
        using (MemoryStream ms = datagram.ToMemoryStream())
        {
            byte[] rx_payload = new byte[payloadLength];
            ms.Read(rx_payload, 0, payloadLength);
        }
    }
}

我还建议您查看该库的文档,以更好地掌握与其相关的其他一些概念 - https://www.codeproject.com/Articles/12458/SharpPcap-A-Packet-Capture-Framework -for-NET

祝学习顺利!

© www.soinside.com 2019 - 2024. All rights reserved.