c - 发送文件套接字C linux

标签 c linux

我有一个关于从另一个服务器端接收文件并将其发送到客户端的服务器(称为 servera)的问题。问题是客户端收到的文件大小为 0,因此文件的字节数为零:

/* receive file size from serverB */

recv(s,&bytes,sizeof(bytes),0);

/* send file size to client */

send(file_descriptor,&bytes,sizeof(bytes),0);

bytes = ntohs(bytes);

/* receive (from serverb) and send immediately (to client)*/

while (total != bytes) {
    nread = read(s,&c,sizeof(char));
    if(nread == 1){
        send(file_descriptor,&c,sizeof(c),0);
        total += nread;
    }
}

出了什么问题?

最佳答案

一切都可能是错误的。

在依赖副作用之前,您必须检查 I/O 调用是否有错误,否则您将得到不可预测的结果。

在您的情况下,也许第一个 recv() 失败,使 bytes 未初始化为 0。

此外,一次读取一个字节的循环非常效率低下,并且仍然无法检查它是否设法发送该字节(send() 可能会失败在这种情况下您需要重试)。

关于c - 发送文件套接字C linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17322022/

相关文章:

linux - 如何在这里实现设置 ssh 隧道到端口...?

c++ - 如何以标准/可移植且高效的方式编写 int64=int32*int32?

c - VC:如何在.def文件中指定'unecorate'?

c - 如何避免多个原始套接字绑定(bind)到同一 IP 地址?

linux - 带 -exec 的 find 命令不运行 -exec 命令

c++ - 如何将后台运行的子进程调到前台

c - 使用结构体分配内存时出现段错误

c# - C# 中的 fmodf 等效吗?

c - Valgrind 条件跳转或移动取决于未初始化的值

html - 使用 sed 命令将 LaTeX 文档转换为 html?