刚刚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); }
跪求各位大大帮帮忙。已经倒腾一下午了。
解决方案
20
看看send返回值是啥
80
不知道有多少前人掉在TCP Socket
send(人多)send(病少)send(财富)
recv(人多病)recv(少财富)
陷阱里面啊!
http://bbs.csdn.net/topics/380167545
send(人多)send(病少)send(财富)
recv(人多病)recv(少财富)
陷阱里面啊!
http://bbs.csdn.net/topics/380167545