我正在尝试从服务器读取一条消息(字符串/文本),并且我将缓冲区大小设置得非常大 (buffer_size = 1000),以便我只需要从服务器读取一次。
所以我的问题是,如果消息正好是 10 个字节,并且我调用了 read(socket, buffer, buffer_size),那么它是否只会读取 10 个字节,因为它小于实际的缓冲区大小?我想我只是对调用的行为感到好奇,以防读取的内容实际上不如预期的那么多。
另外,如果我再次调用 read(),它会覆盖缓冲区中的内容吗?我的意思是清空缓冲区并用新输入覆盖它。
最佳答案
您可能正在使用 TCP,它是一种流式传输协议(protocol) - 不发送消息边界,只发送字节流。因此,即使服务器进行了一次写入,您最终也可能不得不进行多次读取才能获取数据。
继续阅读,直到您有足够的字节,或者读取返回 0(这意味着 EOF)。
如果一次读取得到 N 个字节,但还不够,那么您需要发出另一个读取目标缓冲区 + N。
关于c++ - C/C++ 中的 Read() - 关于读取内容与缓冲区大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27205524/