作者HILL33LOVE (就是爱希尔)
看板Programming
标题[问题] socket linux c 传送档案有时会错误
时间Sun Jan 11 08:32:45 2009
目前在练习写linux c socket的练习
在程式中用一个while回圈来接收Client端送来要求多个档名的功能
在档案大小都很小的时候,都很正常接收,但如果档案大小很大>>BUF_SIZE(1024)时
就会发生传输有问题,常常Client端接收到的档案大小有问题
可是我在传档案内容有另一个while回圈去读要开启的档案的大小
再去送到socket
传输档案流程:
server先接收到档名,开档去把档案大小传给client,接着server就把档案内容传给
cleint。
会不会是server连续传两次,会造成有这种问题,还是要改成client传给server一个讯息
之後,server再传给client,尽量避免某一方连续传两次的情况出现,
想提出来看有没有再传档案的时候也有同样的问题,
还有大家再写socket的时候,在read之前都会习惯把buffer清空吗?
因为之前常遇到buffer没有清空而造成程式有问题。谢谢
while(1){
memset(buffer,0,sizeof(buffer));
ret=read(connfd,buffer,BUF_SIZE); //接收档名
if(ret==0){
printf("Client Over\n");
break;
}
if((file_fd=open(buffer,O_RDONLY))==-1){
Error("can't open file");
}
filesize=doGetFileSize(buffer,"r"); //得知档案大小的函数
filesizestr[0]= filesize;
sprintf(buf,"%d",filesizestr[0]);
write(connfd,buf,BUF_SIZE); //传档案大小
memset(buffer,0,sizeof(buffer));
while((ret=read(file_fd,buffer,BUF_SIZE))>0){ //传档案内容
write(connfd,buffer,ret);
}
close(file_fd);
}
break;
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.167.110.21
1F:推 sjrom:man 一下read ?? 看一下内容解释?try pread? 59.117.69.64 01/11 10:30