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和其他东西按原样发送接收内容,但我想用二进制序列化来处理对象)请记住,我对套接字/序列化一般来说是个新手。

C#通过一个套接字发送多个不同的对象

由于您使用的是二进制格式化程序,因此反序列化数据的最有效方法是使用二进制格式化程序的Deserialize方法。

此外,当你进行反序列化时,如果你想知道你的对象是哪种类型,你可以使用以下代码:

BinaryFormatter bf;
object obj =  bf.Deserialize(some_stream);
obj.GetType().Name;  // here you have the name of the class you just deserialized
相关文章: