[問題] socket linux c 傳送檔案有時會錯誤
目前在練習寫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
推
01/11 10:30, , 1F
01/11 10:30, 1F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):