服务器与客户端的通信,相互间需要发送10多种不同的消息。我想把每种消息定义为结构或类。能将结构和类写入socket,并能在另一端正确地取得,并能正确判断是哪个消息吗?想过通过System.XML.Serialize.XMLSerialize类来序列化类,但这样发过去后另一端无法判断这个消息具体是哪个消息,也就无法正确反序列化。期盼各位指教,不胜感激

解决方案 »

  1.   

    可以在序列化后的byte[]的前面加上一字节判断是那种类型就可以了,你只定义的8种,1字节就够了,接到后先把第一字节取出判断是哪种类型,再把其他的按照对应的类反序列化就可以了
      

  2.   

    序列化好像直接序列化到流里面去的,这样的话容不得我再加个byte阿。
    楼上请指教,能提供代码参考吗?
      

  3.   

    序列化可以序列化为byte[]的,代码如下#region 序列化和反序列化/// <summary>
    /// 从二进制数组反序列化得到对象
    /// </summary>
    /// <param name="buf">字节数组</param>
    /// <returns>得到的对象</returns>
    public static object DeserializeBinary(byte[] buf) 
    {
    try
    {
    System.IO.MemoryStream memStream = new MemoryStream(buf);
    memStream.Position=0;
    System.Runtime.Serialization.Formatters.Binary.BinaryFormatter deserializer = 
    new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
    object newobj = deserializer.Deserialize(memStream);
    memStream.Close();
    return newobj;
    }
    catch
    {
    return null;
    }
    }/// <summary>
    /// 序列化为二进制字节数组
    /// </summary>
    /// <param name="request">要序列化的对象</param>
    /// <returns>字节数组</returns>
    public static byte[] SerializeBinary(object request) 
    {
    try
    {
    System.Runtime.Serialization.Formatters.Binary.BinaryFormatter serializer = 
    new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
    System.IO.MemoryStream memStream = new System.IO.MemoryStream();
    serializer.Serialize(memStream, request);
    return memStream.GetBuffer();
    }
    catch
    {
    return null;
    }
    }#endregion