【探索发现】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:http://files.cnblogs.com/--Sam--/NetDataTranFormat.rar

你可能感兴趣的:(WinForm)