我正在用 c 编写一个客户端-服务器程序,我必须将多个图像文件从服务器发送到客户端。有没有办法让服务器知道客户端何时完成从套接字读取、在本地创建图像文件并成功写入?附言我已经尝试向套接字发送消息,当我尝试从服务器读取套接字时,程序挂起。任何帮助都感激不尽。 这是服务器代码中的一个函数,它将文件发送到套接字:
while(1)
{
unsigned char buf[256] = {0};
int n = fread(buf,1,256,fp);
if(n>0) { send(sockfd,buf,n,0); }
if(n<256) {
if(feof(fp))
printf("Sent to socket\n");
break;
}
}
fclose(fp);
}
char buf[5]
read(sockfd,buf,5);
if(strcmp(buf,"ready")==0) //send more files
这是客户端写入文件的函数:
FILE* fp;
fp = fopen(file_path,"ab");
char buf[256];
int num;
int total=0;
while(( num = recv(sockfd,buf,256,0))>0)
{
total+=num;
fwrite(buf,1,num,fp);
}
fclose(fp);
write(sockfd,"ready",5);
}
当我在一个文件传输后在服务器上读取时,程序挂起。
最佳答案
你的问题出在客户端:
while(( num = recv(sockfd,buf,256,0))>0)
recv()
只会在文件末尾返回 0
- 即当服务器关闭套接字的发送端时。但是您的服务器并没有这样做——它正在等待来自客户端的响应。这意味着你陷入僵局。
如果你想在一个连接中发送多张图片,你需要向你的客户端发送一些信息,让它知道一张图片何时结束。一种方法是首先向您的客户端发送它应该期望的文件大小,然后是文件数据。然后客户端可以跟踪它收到了多少字节,然后发送“就绪”响应。
关于c - 知道客户端何时完成从 C 中的套接字读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30067822/