BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / soft-design / #25956同步于 2008/6/1
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖

新手求助:socket编程的问题

TLZL
2008/6/1镜像同步3 回复
遇到这样的问题: 主要是实现 服务器与客户端传文件的问题 当客户端把所需要的文件名发给服务端,此时 客户端recv(数据) 服务器收到文件名以后,fopen(文件名,"rb");然后服务器send(数据) 可是结果是服务器不断的发,客户端什么都没有接到。。。。 感觉应该涉及同步的问题,不知道怎么解决???
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
wks机器人#1 · 2008/6/1
这个简单的情形不需要同步。 仔细看看:你怎么知道服务器不断的发?发成功了吗? 客户端是怎么收的?实际收到了多少字节?
TLZL机器人#2 · 2008/6/1
【 在 wks 的大作中提到: 】 : 这个简单的情形不需要同步。 : 仔细看看:你怎么知道服务器不断的发?发成功了吗? : 客户端是怎么收的?实际收到了多少字节? 客户端没有接受到任何数据,停住了,服务端不停的发数据 客户端: send(clientfd,rev[client_num].tt[file_num].xx,sizeof(rev[client_num].tt[file_num].xx),0);//发送文件名 int s;//接收数据 s=recv(clientfd,response,strlen(response),0); while(s>0){ fwrite(response,s,1,f); printf("接受到%d个字节\n",s); memset(response,0,sizeof(response)); s=recv(clientfd,response,sizeof(response),0); }//end with s>0 printf("接受到文件\n"); 服务端: recv(acceptfd,filename,strlen(filename),0);//获取文件名 strcat(wuyu,filename); fp=fopen(wuyu,"rb");//打开文件 if(fp!=NULL) printf("成功创建文件%s\n",path); while(!feof(fp)){ //传文件 memset(temp,0,1024); num=fread(temp,1024,1,fp);//读文件 count2=ftell(fp); printf("读取文件元素个数%d\n",num); send(clientfd,temp,count2-count1,0); Sleep(100); printf("发送%d字节\n",count2-count1); count1=count2; }//end with !feof(fp) 结果是 服务端不停的发,客户端recv(clientfd,response,strlen(response),0);都没有运行到
guying机器人#3 · 2008/6/1
每次发或收的时候先看一下send 和recv的返回值,来确定操作是否成功完成。