杭州有亚马逊公司吗:为什么Socket中recv函数出现问题啦?

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/28 10:44:20
我编的是服务器和客户端同时收发数据的程序,其中利用了多线程。当我给客户端发送大文件的时候,客户端在还没有完全收到文件的情况下recv函数就阻塞了,得关闭服务器端才返回。但是我查了服务器发出的文件大小是正确的。为什么recv函数不再接收数据了呢?以下是客户端接收程序:
void thread_r(void)
{
int i,j=0;
long int *size=malloc(sizeof(long int));//存放文件大小
char ch1[N];//存放数据的缓冲区
FILE *fp;
if(!(fp=fopen("/rbv","wb")))
{printf("Error in open files!\n");
exit(0);}
read(sockfd,size,sizeof(size));
while(j<(*size))
{

i = recv(sockfd,ch1,N,0); //接收数据
if(i==-1)
{

printf("系统错误,错误代码:%d, 错误信息:%s\n", errno, strerror(errno));
break;
}
fwrite(ch1,sizeof(char),strlen(ch1),fp);
memset(ch1,0,N);

}

fclose(fp);
free(size);
}
比如说,我服务器给客户端传3.8兆的pdf文档,但是客户端收到3.2兆左右就停止接收,关闭服务器才能从recv函数返回(查明服务器已发送了3.8兆大小的文件)

我是用接收文件大小控制客户端的循环接收,数据缓存按道理可以是任意大小的,我设定的是1024个字节。

你的数据缓存区是否够大小呢