【发布时间】:2020-01-22 19:32:51
【问题描述】:
我想在收到消息的同时不断地将small_buf 合并到big_buffer 中。我不知道该怎么做。
char small_buf[100];
char big_buffer[2048];
ssize_t bytes_r = 0;
while((bytes_r = recv(socket_fd,small_buf,sizeof(small_buf)-1,0)) > 0) {
small_buf[bytes_r] = '\0';
// now merge small_buf with big_buffer
}
big_buffer 表示从recv 以较小块的形式接收到的单个大消息。如何将所有 small_buf 合并到 big_buffer 中?
【问题讨论】:
-
保持到目前为止收到的消息的长度。然后从该点开始复制新块。
-
不需要复制。您应该直接在
recv中使用big_buffer,通过使用recv的返回值来跟踪已经写入big_buffer的数量。这样会更有效率。 -
@MickaelB。这对字符串有好处,但不适用于任意二进制数据
-
does not work没有任何意义。 “不起作用”是什么意思?它是如何“不工作”的?发生什么了?什么不会发生?请尝试具体;)它使程序崩溃?程序永远不会退出?