刚刚C语言SOCKET入门,现在正在写一个简单的传输多文件的模块,但是发现服务器在send()的时候发生了问题,数据好像发送不出去(但是之前的send()都可以,就这个模块出来问题...),不知道是不是recv没有取数据导致了数据堆在发送栈上。
出问题的部分代码如下:
客户端:
for(n=0;n<30;n++)
{
SOCKET file_sock=socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);
while(connect(file_sock,(SOCKADDR *)&sockinfo,sizeof(SOCKADDR))!=0)
continue;
memcpy(path+big+2,all_province[n],strlen(all_province[n])+1);
if((fp=fopen(path,"wb"))==NULL)
{
perror("无法正确创建省份文件..\n");
closesocket(file_sock);
WSACleanup();
return -1;
}
while((lon=recv(file_sock,buf,250,0))>0)
if(write(buf,1,lon,fp)<=0)
{
fclose(fp);
closesocket(file_sock);
break;
}
fclose(fp);
closesocket(file_sock);
}
服务器端:
for(n=0;n<30;n++)
{
SOCKET file_sock=accept(servsock,NULL,NULL);
memcpy(name+big+2,all_province[n],strlen(all_province[n])+1);
if((fp=fopen(name,"rb"))==NULL)
{
closesocket(file_sock);
perror("无法打开省份文件..\n");
goto loop1;
}
fseek(fp,0,SEEK_SET);
while((lon=fread(buf,1,250,fp))>0)
if(send(file_sock,buf,lon,0)<=0)
{
perror("链接发生错误..\n");
closesocket(file_sock);
fclose(fp);
}
shutdown(file_sock,SD_SEND);
closesocket(file_sock);
fclose(fp);
}