我試着在發送對象(在我的情況的圖像)一個的NetworkStream .. however- IM沒有得到完整的圖像..C#讀取從的NetworkStream
這是客戶端代碼:
private void Form1_Load(object sender, EventArgs e)
{
TcpClient c = new TcpClient();
c.Connect("10.0.0.4", 10);
NetworkStream ns = c.GetStream();
Bitmap f = GetDesktopImage();
byte[] buffer = imageToByteArray(f);
byte[] len = BitConverter.GetBytes(buffer.Length);
MemoryStream stream = new MemoryStream();
stream.Write(len, 0, len.Length);
stream.Write(buffer, 0, buffer.Length);
stream.Position = 0;
stream.CopyTo(ns);
}
正如你可以看到我的全部內容寫入到正規的MemoryStream第一(因爲我不想使用兩次NetworkStream
- 只有到那時,我複製MemoryStream
內容到NetworkStream
的服務器代碼:
private void Form1_Load(object sender, EventArgs e)
{
TcpListener tl = new TcpListener(IPAddress.Any, 10);
tl.Start();
TcpClient c = tl.AcceptTcpClient();
network = new NetworkStream(c.Client);
byte[] buff = new byte[4];
network.Read(buff, 0, 4);
int len = BitConverter.ToInt32(buff, 0);
buff = new byte[len];
network.Read(buff, 0, buff.Length);
pictureBox1.Image = byteArrayToImage(buff);
Thread th = new Thread(method);
}
現在,當我運行兩個應用IM只得到所拍攝的圖像的上半部分......它甚至更奇怪,因爲既直接寫入到網絡流完美的作品...例如:
ns.Write(len, 0, len.Length);
ns.Write(buffer, 0, buffer.Length);
這將很好地工作,我會得到對方的全部圖像..但我不想使用它的兩倍(這只是一個例子,在我真正的項目中,我將不得不使用它很多,所以我想盡可能減少網絡使用率,並且不會爲每一個數據觸發它)。
爲什麼它不能使用簡單的CopyTo
方法?
我將不勝感激任何幫助!
感謝
'network.Read(淺黃色,0,buff.Length);'不必讀取'buff.Length'字節。檢查其返回值,並繼續閱讀,直到你閱讀'len'字節.. – Eser