因为发送数据大小不确定,所以设定一个比较小的缓冲区, 然后多次循环读取,再把读取的数据累加。
问题:
怎么判断将所有数据读取完成?我最开始的实现是这样的: int recv;
StringBuilder sb = new StringBuilder();
byte[] buffer = new Byte[10]; //缓冲区 while (true)
{
sb.Remove(0, sb.Length); //清空
//循环读取
while (true)
{
recv = clientSocket.Receive(buffer);
sb.Append(Encoding.Unicode.GetString(buffer, 0, recv)); //添加StringBuilder
if (recv < buffer.Length) //表示读完
break;
} Console.WriteLine("Client said: {0}", sb.ToString()); }
}
问题是:
当数据大小正好是 缓冲区的整数倍时(比如 20字节), 程序就没法判断是否接收完成。 一直阻塞在 recv = clientSocket.Receive(buffer);
这里。
问题:
怎么判断将所有数据读取完成?我最开始的实现是这样的: int recv;
StringBuilder sb = new StringBuilder();
byte[] buffer = new Byte[10]; //缓冲区 while (true)
{
sb.Remove(0, sb.Length); //清空
//循环读取
while (true)
{
recv = clientSocket.Receive(buffer);
sb.Append(Encoding.Unicode.GetString(buffer, 0, recv)); //添加StringBuilder
if (recv < buffer.Length) //表示读完
break;
} Console.WriteLine("Client said: {0}", sb.ToString()); }
}
问题是:
当数据大小正好是 缓冲区的整数倍时(比如 20字节), 程序就没法判断是否接收完成。 一直阻塞在 recv = clientSocket.Receive(buffer);
这里。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货