c - 获取socket读操作的进度

标签 c sockets posix

我想用 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/

相关文章:

c++ - Arduino:如何向任何文本框或记事本显示 Serial.print 值

.net - 最有效的线程数?

linux - exec* 的 argv 可以在多个地方包含 0 值吗?

c - 为什么要使用只返回常量而不是只使用常量的函数?

c - 影响 gcc 中的函数克隆/复制/持续传播

c++ - 如何防止使用 ptrace 执行系统调用

java - 当我尝试用 Java 运行我的套接字程序时,为什么会出现错误?

ruby - 在 ruby​​ 中发送和接收 TCP 数据

linux - 内核模式 clock_gettime()

c - pthreads create_pthread() 传递多个参数