我遇到一个服务器(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;
}
}
怎么了?
答案 0 :(得分:1)
一切都可能是错的。
在依赖副作用之前,您必须检查I / O调用是否有错误,否则您将获得无法预测的结果。
在您的情况下,可能第一个recv()
失败,将bytes
未初始化为0。
此外,一次读取单个字节的循环非常效率低,仍然无法检查它是否设法发送该字节(send()
可能会失败,在这种情况下您需要重新尝试)。