如何从套接字只接收X字节?

时间:2012-08-05 15:01:31

标签: c# mono

当我调用socket.Receive(Buffer)时,有没有一种方法可以阻塞调用直到读取一定数量的字节?如果没有,那么建立接收循环的典型方法是什么?

1 个答案:

答案 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

中,这可能会更容易一些