我正在创建服务器和客户端(用C语言编写),在其中我需要将大量数据返回给客户端,并在其控制台上进行打印。
但是,在客户端中,当我从套接字读取缓冲区(缓冲区大小为512,我不想扩展此数字)时,有时该信息块大于512字节。
而不是增加缓冲区的尺寸,我想分段读取套接字。这是我的尝试:
在服务器中:
int saved = dup(1); // Save stdout
dup2(socketfd, STDOUT_FILENO); // Redirect to socket
data_print(); // Function that prints all the information to send to the client
dup2(saved, STDOUT_FILENO); // Redirect back to stdout
close(saved);
这是我用来将数据发送到套接字而不是write()的东西。这是可行的,但是我不确定是否应该这样做。使它变得更容易,[>]
在客户端:
do {
if ((n_bytes = read(socketfd, buffer, 512)) < 0) {
// ERROR
}
buffer[n_bytes] = '\0';
printf("%s", buffer);
} while (n_bytes == 512);
我想用此代码实现以下内容:假设服务器发送了一个600字节的数据块。我希望客户端读取512字节,打印出来,然后再读取其他88字节,然后打印出来。
当然,我打算使用更大的数据块,因此毫无疑问增加缓冲区的大小。
我确实需要帮助来了解write()和read()调用的工作方式。我在这里实际上并没有使用write(),但是我相信我用来向客户端发送数据的代码具有相同的效果。
提前感谢!
我正在创建服务器和客户端(用C语言编写),在其中我需要将大量数据返回给客户端,并在其控制台上进行打印。但是,在客户端中,当我从套接字读取到...
假设您的服务器确实在向套接字发送数据:您的客户端块应该像这样。