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);
}
如何判断你接收的数据已经完了呢?假设你的缓冲区recvBytes大小小于你的数据,那剩下的数据如何处理呢?
所以这里其实有2个问题。
1、数据小于等于缓冲区:那么recvbytes应该就是你接收到的完整内容;
2、数据大于缓冲区:那么就要分多次来接收,这里就必须要确定你需要接收的数据的大小defaultTotal,当接收到的数据小于需要接收的数据时,多次执行Receive,直到recvTotal==defaultTotal。
你在发送端 设置一个标志,说明我发送的东西已经发送完毕,你接受的时候,判断接受的网络流中是否有这个标志,如果有,代表已经接收完整了。否则没有。