-2

我有关于从另一个服务器端接收文件的服务器(调用 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;
    }
}

怎么了?

4

1 回答 1

1

一切都可能是错的。

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

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

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

于 2013-06-26T13:55:38.610 回答