package base

it2022-05-10  69

    [Serializable]     public abstract class PacketBase {         protected PacketHead packetHead;         protected PacketPayload packetPayload;

        public PacketBase(PacketHead packetHead, PacketPayload packetPayload) {             this.packetHead = packetHead;             this.packetPayload = packetPayload;             if(packetPayload != null) {                 this.packetHead.PayloadLength = packetPayload.RawData.Length;             }         }

        public PacketBase() {             this.packetHead = new PacketHead();             this.packetPayload = new PacketPayload();         }

        /// <summary>         /// 与Packet对应的二进制数据报         /// </summary>         public byte[] ByteArray {             get {                 byte[] buf = null;                 if(packetPayload != null) {                     buf = new byte[packetHead.RawData.Length + packetPayload.RawData.Length];                     Array.Copy(packetHead.RawData, buf, packetHead.RawData.Length);                     Array.Copy(packetPayload.RawData, 0, buf, packetHead.RawData.Length, packetPayload.RawData.Length);                 } else {                     buf = new byte[packetHead.RawData.Length];                     Array.Copy(packetHead.RawData, buf, packetHead.RawData.Length);                 }                 return buf;             }             set {                 if(value.Length >= PacketHead.HeadLength) {                     byte[] buf = new byte[PacketHead.HeadLength];                     Array.Copy(value, buf, PacketHead.HeadLength);                     packetHead = new PacketHead(buf);                     int nPayload = value.Length - PacketHead.HeadLength;                     if(nPayload > 0) {                         buf = new byte[nPayload];                         Array.Copy(value, PacketHead.HeadLength, buf, 0, nPayload);                         packetPayload = new PacketPayload(buf);                     } else {                         packetPayload = null;                     }                 } else {                     throw new Exception(Properties.Resources.DataLengthError);                 }             }         }

        #region 公开Packet头部的属性         public PacketType PacketType {             get {                 return packetHead.PacketType;             }         }

        public IPAddress SourceIp {             get {                 return packetHead.SourceIp;             }             set {                 packetHead.SourceIp = value;             }         }

        public IPAddress DestIp {             get {                 return packetHead.DestIp;             }             set {                 packetHead.DestIp = value;             }         }

        public int PktId {             get {                 return packetHead.PktId;             }             set {                 packetHead.PktId = value;             }         }

        public int PayloadLength {             get {                 return packetHead.PayloadLength;             }             set {                 packetHead.PayloadLength = value;             }         }         #endregion     }

转载于:https://www.cnblogs.com/rudy/archive/2009/03/23/1419745.html

相关资源:sun.misc.BASE64Decoder.jar 绿色版完整 官方版本 直接调用

最新回复(0)