- 论坛徽章:
- 0
|
问个问题,我在Linux里面写了个服务器小程序,用来发送大文件,在windows写了个客户端小程序,用来接受服务器发来的文件,当我的文件超过100K左右的时候Linux里面的服务器程序里面的send语句就会返回-1,出现“connection reset by peer”这样的错误.同样的算法把window作为服务器,Linux作为客户端就没有这样的错误。当文件大小为10来K 左右的时候就不会出现错误。我个人觉得是不是因为缓冲区溢出了?各位有什么见解,为什么呢?
代码:
int Recv(int sock,char *buf)
{
int len=0,result =0;
if(-1== recv(sock,(char *)&len,sizeof(int),0))
{
perror("error : ");
}
result = recv(sock,buf,len,0);
if(result == -1)
{
perror("error : ");
}
if(result != len)
{
printf("recive error\n");
exit(0);
}
return len;
}
int Send(int sock,char *buf,int len)
{
int net_len=len;
if(-1==send(sock,(char *)&net_len,sizeof(int),0))
{
perror("error : ");
return -1;
}
if(-1==send(sock,buf,len,0))
{
perror("error : ");
return -1;
}
}
void RecvFile(int sock,char *filename)
{
FILE *fp;
char *buffer = (char *)malloc(BUFFERSIZE + sizeof(int));
int len=0;
printf("download file : %s\n",filename);
fp = fopen(filename ,"wb");
do
{
len=Recv(sock,buffer);
if(len!=BUFFERSIZE)
{
len = *((int *)(buffer+BUFFERSIZE));
}
fwrite(buffer,1,len,fp);
}while(len==BUFFERSIZE);
fclose(fp);
}
void SendFile(int sock,char *filename)
{
FILE *fp;
int len=0;
char *buffer = (char *)malloc(BUFFERSIZE+sizeof(int));
printf("sending file %s \n",filename);
fp = fopen(filename ,"rb");
do
{
len=fread(buffer,1,BUFFERSIZE,fp);
if(len <BUFFERSIZE)
{
*((int *)(buffer+BUFFERSIZE))=len;
len=BUFFERSIZE+sizeof(int);
}
Send(sock,buffer,len);
}while(len==BUFFERSIZE);
fclose(fp);
} |
|