C# 中 struct 固定长度(Socket报文头规范)

[MarshalAs(UnmanagedType.I4)]
此属性标识 int类型 长度为4字节
int有好几种:Int16 Int32 Int64
意义同名,分别占16位,32位,64位
8位一字节,所以分别占2字节,4字节,8字节

C#对整数做了基元类型:
short映射Int16
int映射Int32
long映射Int64

int即Int32
即:4字节
 
 
//消息结构体
    [Serializable]  //  指示可序列化 
    [StructLayout(LayoutKind.Sequential, Pack = 1)]
    public struct sMessage
    {
        //聊天主题Id
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 36)]
        public char[] ChatTopicID;


        //聊天消息Id
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 36)]
        public char[] ChatMessageID;


        //消息类型 0:错误 1:消息 2:文件 3:登录 4::获取登录用户 5:窗口抖动 6:广播消息 7:消息发送失败......
        [MarshalAs(UnmanagedType.I4)]
        public int MsgAction;


        //发送用户的Id
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 36)]
        public char[] SendUserID;


        //接收用户的Id
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 36)]
        public char[] ReceiveUserID;


        //消息长度 去除头后的长度
        [MarshalAs(UnmanagedType.I4)]
        public int MsgLen;


        //当前包次序(如果是文件的话)
        [MarshalAs(UnmanagedType.I4)]
        public int MsgIndex;


        //消息包的个数 (如果是文件的话)
        [MarshalAs(UnmanagedType.I4)]
        public int MsgNum;


        //消息发送时间 2016-01-11 14:15:01
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 19)]
        public char[] TimeStamp;


        //消息发送时间 20160111141501+3位毫秒+(100-999)随机数 sss (2016-01-11 14:15:01 fff)
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
        public char[] FileName;


        //初始化
        public sMessage(string _ChatTopicID, string _ChatMessageID, string _SendUserID, string _ReceiveUserID, string MsgStr, string _FileName)
        {
            ChatTopicID = _ChatTopicID.ToCharArray();
            ChatMessageID = _ChatMessageID.ToCharArray();
            SendUserID = _SendUserID.ToCharArray();
            ReceiveUserID = _ReceiveUserID.ToCharArray();
            TimeStamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss").ToCharArray();
            MsgAction = 0;
            MsgNum = 1;
            MsgIndex = 0;
            MsgLen = MsgStr.Length;
            FileName = _FileName.ToCharArray();
        }


    }
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值