[問題] tcpClient接收NetworkStream的問題

看板C_Sharp (C#)作者 (BEN)時間11年前 (2014/07/30 00:22), 編輯推噓0(004)
留言4則, 3人參與, 最新討論串1/1
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

07/30 23:54, , 1F
重傳?
07/30 23:54, 1F

07/31 08:56, , 2F
把內容大小傳過去Client端 Clinet比對目前接收的內容大小
07/31 08:56, 2F

07/31 08:57, , 3F
如果不符合就繼續等資料傳完,或是重傳。
07/31 08:57, 3F

07/31 21:51, , 4F
請handle NS.read的相關exception
07/31 21:51, 4F
文章代碼(AID): #1JryfJOd (C_Sharp)
文章代碼(AID): #1JryfJOd (C_Sharp)