[問題] ftp程式 binary傳檔 資料超過...
在linxu寫server client的ftp程式
server傳檔至client端 檔案會超過原本的file(EX:623655B -> 626688B) 抓不到錯ˊˋ...
奮戰了兩天~~仍然無解..懇請先知幫忙
server:
void ftp_getfile(int sockfd,char *op2)
{
FILE *fp=fopen(op2,"rb");
if(!fp)
{ printf("cant open the file or filename error:%s\n",op2);
strcpy(message.opt2,"error");
send(sockfd,&message,sizeof(message),0);
ftp(sockfd);//keyword
}
while(!feof(fp))
{
fread(&message.payload,sizeof(message.payload),1,fp);
//fwrite(&message.payload,sizeof(message.payload),1,file);
message.value++;
send(sockfd,&message,sizeof(message),0);
}
strcpy(message.opt1,"ok");
printf("傳送%s\n",&message.opt1);
send(sockfd,&message,sizeof(message),0);
printf("All:%d time\n",message.value);
fclose(fp);
ftp(sockfd);//keyword
}
client:
void ftp_getfile(FILE *fp,char *op2,int sockfd)
{
ssize_t n;
FILE *file=fopen(op2,"wb");
for(;;){
recv(sockfd,&message,sizeof(message),0);
if(strcmp(message.opt2,"error")==0)
{
printf("**Cant write the file or filename error:%s**\n",op2);
ftp(fp,sockfd,message.value);
}
recv(sockfd,&message,sizeof(message),0);
while(strcmp(message.opt1,"ok")!=0)
{
fwrite(&message.payload,sizeof(message.payload),1,file);
recv(sockfd,&message,sizeof(message),0);
}
printf("接收File %s ok ,all %d time\n",op2,message.value);
fclose(file);
break;
}//for(;;)
message.value=0;
ftp(fp,sockfd,message.value);
}
message.payload ->char[1024]
value ->int
opt1,opt2 ->char[50]
不知道client端的fwrite為什麼會多抓...懇請幫忙..
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 125.230.130.122
→
01/10 21:17, , 1F
01/10 21:17, 1F
→
01/10 21:18, , 2F
01/10 21:18, 2F
推
01/10 21:59, , 3F
01/10 21:59, 3F
推
01/10 22:06, , 4F
01/10 22:06, 4F
→
01/10 22:07, , 5F
01/10 22:07, 5F
→
01/10 22:07, , 6F
01/10 22:07, 6F
→
01/10 22:08, , 7F
01/10 22:08, 7F
推
01/10 22:09, , 8F
01/10 22:09, 8F
推
01/10 22:14, , 9F
01/10 22:14, 9F