c++ - C/C++ 中的 Read() - 关于读取内容与缓冲区大小

标签 c++ c sockets client-server

我正在尝试从服务器读取一条消息(字符串/文本),并且我将缓冲区大小设置得非常大 (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/

相关文章:

java - Android 通过各种 Activity 使 BT 套接字保持 Activity 状态

c++ - 如何查找所有以1开头和结尾的子串?

C++如何从字符串中读取两行以分隔字符串?

c++ - 如何从二进制文件中找到静态分配的大小?

C - 没有函数指针的动态函数调用

c - 如何确保分配缓冲区在内存中

c++ - argc从哪里来?

Java 重新启动套接字

C++ 构造函数成员初始化列表,对象切片

c - Windows 自定义消息记录器的实现 : reports 10049 when ntwk cable unplugged