C#通过一个套接字发送多个不同的对象
本文关键字:对象 一个 套接字 | 更新日期: 2023-09-27 18:21:36
我遇到了一个问题,我不知道如何有效解决。我制作了一个服务器,可以通过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和其他东西按原样发送接收内容,但我想用二进制序列化来处理对象)请记住,我对套接字/序列化一般来说是个新手。
由于您使用的是二进制格式化程序,因此反序列化数据的最有效方法是使用二进制格式化程序的Deserialize
方法。
此外,当你进行反序列化时,如果你想知道你的对象是哪种类型,你可以使用以下代码:
BinaryFormatter bf;
object obj = bf.Deserialize(some_stream);
obj.GetType().Name; // here you have the name of the class you just deserialized