我使用二進制序列化對象來讀取或寫入數據流,以前如果我們要寫/讀它們,我們必須編譯「實例類」爲DLL文件,所以我們有他們之間是同樣的組合,對嗎?C#,通過Socket通信的二進制序列化
現在好了,這裏是我的問題:
這是我的二進制發送方碼
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);
}
這是我「實例類「我想要發送給整個客戶端的代碼。 OK讓我們考慮下面的代碼:
[Serializable()]
public class DataSend
{
public List<Bitmap> MainData = new List<Bitmap>();
public List<string> Title = new List<string>();
}
正如你所看到的,有幾個列表變量如Bitmap和字符串。 位圖數據用於圖像數據。如果我用很多圖片填充它,它會增加可變內存的大小,大概是20 MB。
之後,我即將把它們發送給整個客戶。那麼,這是我的問題:
使用這種技術,如果大小對象大約20 MB,這將工作好嗎?我知道Socket通信有發送數據的大小限制
我不想定義任何協議,我只是想使用套接字通信,儘管也許這不是最好的方法。
感謝您的回覆。
拋棄'CanRead'檢查,因爲它不會做任何事情,並導致100%的CPU燃燒,如果虛假...你的代碼看起來不錯。 – usr