一般,定长的可以用
public byte[] StructToBytes(object obj)
9 {
10 //得到结构体的大小
11 int size = Marshal.SizeOf(obj);
12 //创建byte数组
13 byte[] bytes = new byte[size];
14 //分配结构体大小的内存空间
15 IntPtr structPtr = Marshal.AllocHGlobal(size);
16 //将结构体拷到分配好的内存空间
17 Marshal.StructureToPtr(obj, structPtr, false);
18 //从内存空间拷到byte数组
19 Marshal.Copy(structPtr, bytes, 0, size);
20 //释放内存空间
21 Marshal.FreeHGlobal(structPtr);
22 //返回byte数组
23 return bytes;
24
25 }但是不定长的结构有问题,不知怎么实现。

解决方案 »

  1.   

    你可以设一个头结构,专门用于设定数据包的长度,比如像移动CMPP协议,联通SGIP协议一样,都有一个头文件,里面包括数据包的长度,命令格式等。
      

  2.   

    一般Socket传文件,都是不定长的。哪有文件都是一样大小的呢?
    解决方法:
    1.如果结构体很大,可以用while分段传送
    2.可以对传送包加标记,例如最后一个包,结尾加一个/end 。或者开头加入整个结构体大小,接收方累计接到这个大小后。组合成结构体。
      

  3.   

    路过学习,最好能给代码,我想通过while取出字节流,可是那个长度我不知要如何取出来,因为那个长度在消息中包括了,不知要如何取!