【探索发现】winform 网络传输时候封包与解包心得

我这个不是一个很好的传输格式,希望可以得到各位的指点。

第一个字节代表:类型

第二个字节开始20字节代表:用户名

第21个字节开始20字节代表:密码

 private void button1_Click(object sender, EventArgs e)
        {
            byte[] package = Pack();
            Unpack(package);
        }
       
        static int userlength = 20;
        static int passlength = 20;
        //打包
        private byte[] Pack()
        {
            byte[] buffer = new byte[1024];
            buffer[0] = 1;//类型
            byte[] username = Encoding.UTF8.GetBytes("Sam");//有长度限制
            byte[] userpass = Encoding.UTF8.GetBytes("Password");//有长度限制

            Array.Copy(username, 0, buffer, 1, username.Length);
            Array.Copy(userpass, 0, buffer, 1 + userlength, userpass.Length);
            return buffer;
        }
        //解包
        private void Unpack(byte[] buffer)
        {
            int type = buffer[0];
            byte[] username = new byte[userlength];
            byte[] userpass = new byte[passlength];

            Array.Copy(buffer, 1, username, 0, userlength);
            Array.Copy(buffer, 1 + userlength, userpass, 0, passlength);
            string strName = Encoding.UTF8.GetString(username).TrimEnd('\0');
            string strPass = Encoding.UTF8.GetString(userpass).TrimEnd('\0');
            string strInfo = string.Format("类型: {0} 用户名:{1} 密码:{2}", type.ToString(), strName, strPass);
            MessageBox.Show(strInfo, "解包完成");
        }

最后效果:

Demo:https://files.cnblogs.com/--Sam--/NetDataTranFormat.rar

posted on 2011-05-29 08:44  --Sam--  阅读(1767)  评论(8编辑  收藏  举报