[英]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.