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(); 展开
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(); 展开
展开全部
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);
}
缓冲区不用太大,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。
所以这里其实有2个问题。
1、数据小于等于缓冲区:那么recvbytes应该就是你接收到的完整内容;
2、数据大于缓冲区:那么就要分多次来接收,这里就必须要确定你需要接收的数据的大小defaultTotal,当接收到的数据小于需要接收的数据时,多次执行Receive,直到recvTotal==defaultTotal。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你在发送端 设置一个标志,说明我发送的东西已经发送完毕,你接受的时候,判断接受的网络流中是否有这个标志,如果有,代表已经接收完整了。否则没有。
追问
java写的服务端,我用java客户端测试的时候大数据量都能接收到,C#就接收不完整
追答
你在客户端接收的时候,判断接收完了没,没有接收完就继续接收啊!既然你可以接收数据,拿说明是对的,你没接收完整,是因为你没有判断你接收的数据到底接收完没有。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询