在C#中,从socket中收到的数据,怎么样变成具体的类中的数据。
比如说,C语言程序客户端发送了这样一个结构
struct test
{
int a;
int b;
char c;
};
这个结构中的数据,当作网络数据流发了过来,在C#中,怎样把他还原为结构中的数据,
难道只能够一个字节一个字节的解析?
或者是C#不适合做分析数据封包程序,现在正在决定使用什么语言做开发,处于技术验证阶段。
但是发现C#好像不太适合,但是使用C++的话,现在好像只能用MFC了。

解决方案 »

  1.   

    在网络上传数据时,可以先把对象的数据序列化成字节数组,在客户端接收到数据后,再反序列化成对象,在转换成自己的类型
    我写了两个方法,可以直接使用,非常方便:
    一、对象序列华为字节数组
                       /// <summary>
    /// 二进制方式将object对象序列化到字节数组中
    /// </summary>
    /// <param name="obj"></param>
    /// <returns></returns>
    public static byte[] SerializeByBinary ( Object obj )
    {
    byte[] buffer2;
    try
    {
    MemoryStream stream1 = new MemoryStream();
    BinaryFormatter formatter1 = new BinaryFormatter();
    formatter1.Serialize(stream1, obj);
    byte[] buffer1 = stream1.ToArray();
    stream1.Close();
    buffer2 = buffer1;
    }
    catch
    {
    buffer2 = null;
    }
    return buffer2; }
    二、字节数组反序列话为对象
                      /// <summary>
    /// 二进制方式字节数组中数据还原为对象
    /// </summary>
    /// <param name="obj"></param>
    /// <returns></returns>
    public static object DeSerializeByBinary ( byte[] byt )
    {
    object obj2;
    try
    {
    MemoryStream stream = new MemoryStream(byt);
    BinaryFormatter formatter = new BinaryFormatter();
    object obj1 = formatter.Deserialize(stream);
    stream.Close();
    obj2 = obj1;
    }
    catch
    {
    obj2 = null;
    }
    return obj2; }将object转换成自己的对象类型就可以了
    如果本答案对你有帮助,请给分,谢谢
      

  2.   

    序列化就是把一个class的object保留下来,写成stream,即保存这个object中的值,又保存类型信息。一般可以保存为xml和binary两种格式。
    比如,你把这个struct序列化到某个stream后,在反序列化,得到的就是这个struct
      

  3.   

    不是这个意思。
    在C#中,无论是class还是struct都与C中的struct内存结构不一样,根本没有办法装换。