我想用 C 语言编写一个小文件传输程序(我正在 Linux 上工作)。 我对套接字编程很陌生,但我已经设法编写了一些服务器和 客户端程序。
我的问题:
如果我有这样的东西:
int read_bytes = read(socket_id, buffer, 4096);
从套接字读取时,如何获取读取进度?
例如我想每 100ms 显示传输了多少字节
迄今为止。我很确定我必须在这里使用线程或其他异步函数。
是否有一个函数可以让我获取读取的字节数
和要读取的字节数
?
更新 1: 累积read()
int total_read_bytes=0, read_bytes;
char buffer[4096];
do {
read_bytes = read(socket_id, buffer, 4096);
total_read_bytes += read_bytes;
} while(read_bytes > 0); /* Read to end or read failed */
这不是非常非常低效吗? (例如传输1MiB文件)
谢谢
最佳答案
如果您可以控制服务器和客户端的代码,则可以让发送方在实际发送文件之前告诉接收方文件的大小。例如,使用消息中的前 8 个字节。这就是要读取的字节数
。
通过累积示例中的read_bytes
,您可以获得读取的字节数
关于c - 获取socket读操作的进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24915287/