直接上代码,我不累赘描述了。 第一步,创建一个工程,命名为client。 客户端用类封装数据结构代码 //把数据结构封装到一个类里面 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; namespace MyMessage { class MyConvert { //对发送的消息进行编码 static public void EncodeMydata(ref MyData mydata, ref COPYDATA copydata) { int size = 4 + mydata.CharArray.Length + mydata.str.Length * 2; byte[] buff = new byte[size]; BitConverter.GetBytes(mydata.IntValue).CopyTo(buff, 0);//整型编码 Encoding.UTF8.GetBytes(mydata.CharArray, 0, mydata.CharArray.Length, buff, 4); //char编码 Encoding.Unicode.GetBytes(mydata.str, 0, mydata.str.Length, buff, 12);//string编码使用unicode编码,以支持中文 copydata.cbData = size; copydata.buff = Marshal.AllocHGlobal(size);//拷贝进非托管区 Marshal.Copy(buff, 0, copydata.buff, size); } //对收到的数据进行解码 static public void DecodeMyData(ref MyData myData, ref COPYDATA copyData) { byte[] buffer = new byte[copyData.cbData];//在托管区分配空间 Marshal.Copy(copyData.buff, buffer, 0, copyData.cbData);//从非托管区读取消息的数据。 myData.IntValue = BitConverter.ToInt32(buffer, 0);//对整型解码 byte[] chararrayBuff = new byte[8]; byte[] strBuff = new byte[copyData.cbData - 4 - 8]; Array.Copy(buffer, 4, chararrayBuff, 0, 8); Array.Copy(buffer, 12, strBuff, 0, strBuff.Length); myData.CharArray = Encoding.UTF8.GetChars(chararrayBuff);//对字符解码 myData.str = Encoding.Unicode.GetString(strBuff);//对stri