作者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://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1406650963.A.627.html
1F:→ Abbee:重传? 07/30 23:54
2F:→ a926:把内容大小传过去Client端 Clinet比对目前接收的内容大小 07/31 08:56
3F:→ a926:如果不符合就继续等资料传完,或是重传。 07/31 08:57
4F:→ EricTsai:请handle NS.read的相关exception 07/31 21:51