c - 将二进制文件逐 block 读取到 C 中的内存缓冲区中

标签 c tcp webserver

我必须在我的网络服务器中读取一个二进制文件并通过 TCP 将其发送到客户端。我决定分 block 阅读。我该怎么做?

我的 fgets 代码仅适用于文本文件(省略了检查返回值的代码):

char buf[2048];

fgets(buf, sizeof(buf), fp);
while (!feof(fp))
{
    Server_TCP_Send(socket, buf, strlen(buf));
    fgets(buf, sizeof(buf), fp);
}
fclose(fp);

最佳答案

使用fread()代替fgets(),注意返回值:

char buf[2048];
size_t buflen; 

while (1) {
    buflen = fread(buf, 1, sizeof(buf), fp);
    if (buflen < 1) {
        if (!feof(fp)) {
            // a read error occured...
        }
        break;
    }
    Server_TCP_Send(socket, buf, buflen);
}
fclose(fp);

或者,某些平台具有通过套接字发送文件的功能。例如,sendfile()在 Linux 上,或 TransmitFile()在 Windows 上。

关于c - 将二进制文件逐 block 读取到 C 中的内存缓冲区中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41685928/

相关文章:

我可以在不使用 system() 命令的情况下在 C 中读/写路由表吗?

c - 如何获得 tcp 套接字的当前 RTT 估计?

linux - Linux TCP/IP 黑客 'live' 在哪里?

java - 创建具有安全性的 REST Web 服务器

linux - 在 linux mint 上安装 lapis(与 lua 5.3 一起)

c - 如何暂停和恢复线程?

c - NGINX 每秒计算请求数

php - 如何在服务器中执行 MQL4 程序?

c - 如何向由 createProcess() 函数创建的进程调用的批处理文件提供参数?

java - 更快地检测 Java/Android 中的损坏套接字