我试图深入了解套接字应用程序,并且我尝试使用数据包创建一个服务器/客户端应用程序作为序列化类
示例:
[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);
}
}
}