C#Socket怎么才能接收完整的数据

byte[]recvBytes=newbyte[1024*8];intbytes=0;while(true){bytes=c.Receive(recvBytes,recv... byte[] recvBytes=new byte[1024*8];  
int bytes = 0;
while (true)
{
bytes = c.Receive(recvBytes, recvBytes.Length, 0);//从服务器端接受返回信息     
//将读取的字节转换成字符串
recvStr += Encoding.GetEncoding("gb2312").GetString(recvBytes, 0, bytes);
if (bytes > 0)
break;
}
Console.WriteLine(">>>>>>>>>>>接收返回数据内容:"+recvStr);
//MessageBox.Show(recvStr);
c.Shutdown(SocketShutdown.Both);
c.Close();
展开
 我来答
她是我的小太阳
高粉答主

推荐于2018-03-26 · 醉心答题,欢迎关注
知道顶级答主
回答量:5.1万
采纳率:83%
帮助的人:9000万
展开全部
Receive的返回值是接收的字节数,当是0时表示传送结束,否则循环接收
缓冲区不用太大,8k或64k看情况
Byte[] RecvBytes = new Byte[1024*8];
int iBytes = 1;
string strAllHtml = "";
while (iBytes > 0)
{
iBytes = conn.Receive(RecvBytes, RecvBytes.Length, 0);
strAllHtml += Encoding.UTF8.GetString(RecvBytes, 0, iBytes);
}
匿名用户
2012-05-30
展开全部
如何判断你接收的数据已经完了呢?假设你的缓冲区recvBytes大小小于你的数据,那剩下的数据如何处理呢?
所以这里其实有2个问题。
1、数据小于等于缓冲区:那么recvbytes应该就是你接收到的完整内容;
2、数据大于缓冲区:那么就要分多次来接收,这里就必须要确定你需要接收的数据的大小defaultTotal,当接收到的数据小于需要接收的数据时,多次执行Receive,直到recvTotal==defaultTotal。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yangweiy2011
2012-05-29 · 超过29用户采纳过TA的回答
知道答主
回答量:73
采纳率:0%
帮助的人:57.4万
展开全部
你在发送端 设置一个标志,说明我发送的东西已经发送完毕,你接受的时候,判断接受的网络流中是否有这个标志,如果有,代表已经接收完整了。否则没有。
追问
java写的服务端,我用java客户端测试的时候大数据量都能接收到,C#就接收不完整
追答
你在客户端接收的时候,判断接收完了没,没有接收完就继续接收啊!既然你可以接收数据,拿说明是对的,你没接收完整,是因为你没有判断你接收的数据到底接收完没有。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式