簡體   English   中英

C#通過1個套接字發送多個不同的對象

[英]C# send multiple different objects over 1 socket

我有一個問題,我不確定如何有效解決。 我做了一個服務器,可以通過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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM