簡體   English   中英

C#,基於套接字通信的二進制序列化

[英]C#, Binary Serialization over Socket Communication

我使用二進制序列化對象讀取或寫入數據流,以前如果要寫入/讀取它們,則必須將“實例類”編譯為DLL文件,因此它們之間具有相同的程序集,對嗎?

好吧,這是我的問題:

這是我的二進制發件人代碼

public void SendBinarySerial(object graph)
{
    IFormatter formatter = new BinaryFormatter();

    System.Net.Sockets.NetworkStream strm = mClient.GetStream(); //get TCPclient stream

    formatter.Serialize(strm, graph);
}

這是我的二進制接收器代碼:

private void doRead()
{
    do 
     {
       if (mClient.GetStream().CanRead) 
          {
             System.Net.Sockets.NetworkStream strm = mClient.GetStream();

              IFormatter formatter = new BinaryFormatter();

              object mydat = (object)formatter.Deserialize(strm);//deserialize data receiver         
           }
    } while (true);
}

這是我要發送給整個客戶的“實例類”代碼。 好的,讓我們考慮以下代碼:

[Serializable()]
public class DataSend
{
    public List<Bitmap> MainData = new List<Bitmap>();
    public List<string> Title = new List<string>();
}

如您所見,有幾個列表變量,例如位圖和字符串。 位圖數據用於圖像數據。 如果我用很多圖像填充它,則會增加可變內存的大小,可能約為20 mb。

之后,我將把它們發送給整個客戶。 好吧,這是我的問題:

使用此技術,如果大小對象約為20 mb,是否可以正常工作? 我知道套接字通信有發送數據的大小限制

我根本不想定義任何協議,我只想使用套接字通信,盡管這也許不是最好的方法。

感謝您的答復。

我不會擔心使用套接字的大小限制。 根據我的經驗,可以從NetworkStream讀取/寫入任意大小。 但是,我會擔心Bitmap對象的可序列化性。 據我所知,這不會序列化圖像數據。

一旦文件大小超過數MB,BinaryFormatter就會真正開始掙扎。 您是否考慮過使用使用更復雜的序列化技術的開源通信庫

使用networkcomms.net,您的send方法將變為(您只提供RAW對象,它會為您完成所有序列化):

NetworkComms.SendObject("DataPacket", ipAddress, port, object);

在接收端,您的代碼將是:

NetworkComms.AppendGlobalIncomingPacketHandler<object>("DataPacket", (header, connection, incomingObject) => { object mydat = incomingObject; });
TCPConnection.StartListening();

暫無
暫無

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

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