【发布时间】:2013-07-07 06:16:48
【问题描述】:
我遇到了一个我不确定如何有效解决的问题。 我制作了一个可以通过 TCP 套接字处理多个客户端的服务器。 这些客户端向服务器发送数据(多个不同的对象!)。 服务器存储对象,然后将其重新发送给所有感兴趣的客户端。
现在,客户端收到一个二进制序列化“对象”,但它不知道该对象是由哪个类构成的。 一种找出方法是对我知道它将作为客户端发送的所有可能的类进行反序列化。并检查它是否成功。但是,可以想象,当我以后有 50 个不同的类要反序列化时,当我通过套接字收到大量消息时,这将是非常低效的。
序列化发生在这段代码中,我由一个线程运行,目前只发送虚拟数据:
public static void NotifyService()
{
Stream stream = client.GetStream();
IFormatter formatter = new BinaryFormatter();
while (true)
{
try
{
Class1 klas = new Class1();
Class2 klasen = new Class2();
formatter.Serialize(stream, klas);
formatter.Serialize(stream, klasen);
}
catch (Exception e)
{
Console.WriteLine("Notifier got Exception, closing notify thread: " + e);
break;
}
}
stream.Close();
}
现在的问题是:客户端正确反序列化我的对象的最有效方法是什么?
(还有其他方法可以按原样发送接收内容,使用 XML 和其他内容,但我想使用二进制序列化来处理对象) 请记住,我对一般的套接字/序列化非常陌生。
【问题讨论】:
-
你用什么代码进行二进制序列化?
-
添加了用于序列化的代码。
标签: c# sockets serialization deserialization tcpclient