当我调用socket.Receive(Buffer)时,有没有一种方法可以阻塞调用直到读取一定数量的字节?如果没有,那么建立接收循环的典型方法是什么?
答案 0 :(得分:2)
您通常需要使用接受偏移量和计数的重载,并手动循环(检查返回值),直到您有足够的值。例如:
void ReadExact(Socket socket, byte[] buffer, int offset, int count) {
int read;
while(count > 0 && (read = socket.Receive(
buffer, offset, count, flags)) > 0)
{
offset += read;
count -= read;
}
if(count > 0) throw new EndOfStreamException();
}
如果将套接字包装在NetworkStream
。