作者unstoppable (BEN)
看板C_Sharp
標題[問題] tcpClient接收NetworkStream的問題
時間Wed Jul 30 00:22:41 2014
byte[] Receivebytes = new byte[0];
int ReceivebyteRead = 0; //單次接收的長度
int BytesMergeIndex = 0; //要合併bytes的位置
NetworkStream NS = tcpclient.GetStream();
if(NS.CanRead)
{
do
{
byte[] TempBytes = new byte[tcpClient.ReceiveBufferSize];
ReceivebyteRead = NS.Read(TempBytes, 0, tcpClient.ReceiveBufferSize);
Array.Resize<byte>(ref Receivebytes,
Receivebytes.Length + ReceivebyteRead);
Array.ConstrainedCopy(TempBytes, 0, Receivebytes,
BytesMergeIndex, ReceivebyteRead);
BytesMergeIndex += ReceivebyteRead;
Thread.Sleep(200);
}while(NS.DataAvailable)
BinaryFormatter BF = new BinaryFormatter();
MemoryStream MS = new MemoryStream(Receivebytes);
Data_List = (List<object>)BF.Deserialize(MS);
}
----------------------------------------
我接收的代碼如上,我測試的伺服器在香港,有時會有網路不穩定的問題
網路穩定時一切正常
但當伺服器的PING值飆高
我Client端在接收的時候會出現錯誤:
1.在完成剖析之前已達資料流末端
2.輸入資料流不是有效的二進位格式
追蹤了一下,是接收不完全的問題
造成程式提前離開了do while迴圈
能請教各位有什麼比較好的修改方式嗎?
感恩
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.240.178.11
※ 文章網址: http://www.ptt.cc/bbs/C_Sharp/M.1406650963.A.627.html
→ Abbee:重傳? 07/30 23:54
→ a926:把內容大小傳過去Client端 Clinet比對目前接收的內容大小 07/31 08:56
→ a926:如果不符合就繼續等資料傳完,或是重傳。 07/31 08:57
→ EricTsai:請handle NS.read的相關exception 07/31 21:51