序列化和反序列化数据包

时间:2016-10-28 18:03:09

标签: c# sockets serialization interface

我试图深入了解套接字应用程序,并且我尝试使用数据包创建一个服务器/客户端应用程序作为序列化类
示例:

[Serializable]
class Msg 
{
    public String Cmd { get; set; }

    public Msg(String M)
    {
        this.Cmd = M;
    }

}

我试图使用interfaces

轻松阅读和清洁
public interface Packet
{
    void Execute();
}

数据包:

[Serializable]
class Msg : Packet
{
    public String Cmd { get; set; }

    public Msg(String M)
    {
        this.Cmd = M;
    }
    public void Execute()
    {
      Sender.Send(this);
    }
}

我的问题是,在对数据包进行反序列化时,可以反序列化以了解数据包的类型,例如:

   Packet p = (Packet)Data; // data is the packet sent by the Client Desiralized
   var type = p.GetType();

然后使用它:

if (type== Typeof(Packet.Msg))
   {
       // handle data
   }

是否可以通过Packet Interface获取数据包类型?
编辑: 因为我在.NET中注意到System.Type引用中有GetType方法返回类的类型,所以我试图知道它是否可以返回类的类型(包)

喜欢的东西:

    public void Send<T>(T packet) where T : IPacket
    {
        if (!Connected || packet == null) return;

        lock (_sendBuffers)
        {
            using (MemoryStream ms = new MemoryStream())
            {
                try
                {
                    _parentServer.Serializer.Serialize(ms, packet);
                }
                catch (Exception)
                {
                    Disconnect();
                    return;
                }

                byte[] payload = ms.ToArray();

                _sendBuffers.Enqueue(payload);

                OnClientWrite(packet, payload.LongLength, payload);

                lock (_sendingPacketsLock)
                {
                    if (_sendingPackets) return;

                    _sendingPackets = true;
                }
                ThreadPool.QueueUserWorkItem(Send);
            }
        }
    }

0 个答案:

没有答案