Re: [問題] 請問 Socket 的資料流接收, Buffer 的問題
借這個標題發問,目前也遇到無法完全接收server傳出來的檔案,
程式碼如下,如果不讓第一個//Thread.Sleep運作,就無法正常接收檔案,
第二個sleep時間太短也會接收到一半就停住了,
但是我實在不知道為啥要加這兩個sleep才可以比較正常運作
(檔案太大有時候還是無法完全接收),但是加sleep實在是拖累傳送速率,
不知道是否有解決辦法?傳送檔案大小大概在10MB以內.
希望有人可能幫忙提供意見或是關鍵字Q_Q感謝...
networkStream = tcpClient.GetStream();
Thread.Sleep(2000);//第一個sleep
if (networkStream.CanRead)
{
FileStream filestream = new FileStream("D://test.bak",
FileMode.Create);
byte[] recvbytes = new byte[tcpClient.ReceiveBufferSize];
int chk;
int sum = 0;
while (networkStream.DataAvailable)
{
Thread.Sleep(150);//第二個sleep
chk = networkStream.Read(recvbytes, 0, recvbytes.Length);
sum += chk;
filestream.Write(recvbytes, 0, chk);
};
※ 引述《KENyroj (難得一身雞蛋糕...)》之銘言:
: 目前的改良版是這樣... 不過還是有問題.. @@
: int CurPos = 0;
: byte[] RecvBuf = new byte[m_Client.ReceiveBufferSize];
: int Recved = m_NetworkStream.Read(RecvBuf, CurPos, RecvBuf.Length);
: while (m_NetworkStream.DataAvailable)
: {
: FileStr.Write(RecvBuf, CurPos, Recved);
: CurPos = +Recved;
: Recved = m_NetworkStream.Read(RecvBuf, CurPos, RecvBuf.Length);
: }
: 錯誤發生在此...
: 類型 System.ArgumentOutOfRangeException 的未處理例外狀況發生於 System.dll
: 我在要取得這個 Read() 的回傳值就已經被打槍了... @@
: 請問有什麼解決之道嗎?? 謝謝 ^^"
: __yroj
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 211.74.244.54
推
10/09 10:35, , 1F
10/09 10:35, 1F
推
10/09 10:42, , 2F
10/09 10:42, 2F
樓上的大大,可否說詳細一點呢?若以8k為一包是不是說在sever端將資料拆成n*8k,
分批傳送至Client,在Client在做組合?(不知道是不是這個意思以及可行性?)
※ 編輯: kakafood 來自: 140.116.72.46 (10/09 12:51)
推
10/09 15:46, , 3F
10/09 15:46, 3F
推
10/09 15:50, , 4F
10/09 15:50, 4F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):
C_Sharp 近期熱門文章
PTT數位生活區 即時熱門文章