C#将二进制内容读入结构体,通过socket发送后读出结构体内容.
解决方案 »
- 向高手求救关于if语句!!!
- VS2003 Calendar 显示汉字问题
- 填写表单的时候在一个textbox中按两次ESE将删除所有textbox中的值
- 如何连接压缩包中的Excel文件
- 图片处理问题,着急死了
- 如何手动触发button1.click事件
- HtmlEncode对HttpResponse编码
- [高分求助]关于线程的问题!!!
- 请问在C#中将ASCII码转换为字符的函数是什么
- 怎样在一个构造函数里调用另一个构造函数呢?在线等!!!
- DataGridView 的 RemoveAt 和 DataTable 的RemoveAt 的区别?
- 我想用c#程序在后台用excel打开一个xml文件,但碰到一点问题
看这帖子里我的回复
public object GetStruct(SocketHelper.CMDType cmdType, Byte[] _buffer)
{
int headsize = SocketHelper.DataHeadSize;
IntPtr ptr = Marshal.AllocCoTaskMem(headsize);
Marshal.Copy(_buffer, 0, ptr, headsize);
_struct = Marshal.PtrToStructure(ptr, typeof(SocketHelper.DataHeader));
}
public class SocketHelper
{
public const int DataHeadSize=11; public struct DataHeader
{
public DataHeader(int str)
{
Mark = "ABCDEFGHIJ".ToCharArray();
nCmdType = '0';
}
public char[] Mark;//10
public char nCmdType;
};
}
结构体
public struct My_Test
{
public string Ip;
public string Port;
public string str_Msg;
}客户端
发送事件
Stream str = new NetworkStream(sok);
My_Test myobj = new My_Test();
myobj.Ip = this.textBox1.Text;
myobj.Port = this.textBox2.Text;
myobj.str_Msg = this.richTextBox2.Text;
int size = Marshal.SizeOf(myobj);
IntPtr buffer = Marshal.AllocHGlobal(size);
Marshal.StructureToPtr(myobj, buffer, true);
byte[] sendbyte = new byte[size];
Marshal.Copy(buffer, sendbyte, 0, size);
IFormatter formatter = new BinaryFormatter();
formatter.Serialize(str, myobj);
sok.Send(sendbyte);
Marshal.FreeHGlobal(buffer); 服务端
int size = Marshal.SizeOf(myobj);
IntPtr buffer = Marshal.AllocHGlobal(size);
byte[] byt = new byte[size];
Marshal.Copy(byt, 0, buffer, size);
string strip=((My_Test)Marshal.PtrToStructure(buffer, myobj.GetType())).Ip;
string strmsg = ((My_Test)Marshal.PtrToStructure(buffer, myobj.GetType())).str_Msg;
newsok.Receive(byt, byt.Length, 0);
string str = "";
//委托将数据显示到文本框
GetControl getcon = new GetControl(GetStr);
this.BeginInvoke(getcon, new object[] { strmsg });
Marshal.FreeHGlobal(buffer);