发送文件套接字C linux

时间:2013-06-26 13:52:50

标签: c linux

我遇到一个服务器(call 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;
    }
}

怎么了?

1 个答案:

答案 0 :(得分:1)

一切都可能是错的。

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

在您的情况下,可能第一个recv()失败,将bytes未初始化为0。

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