[問題] socket linux c 傳送檔案有時會錯誤

看板Programming作者 (就是愛希爾)時間17年前 (2009/01/11 08:32), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串1/2 (看更多)
目前在練習寫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
man 一下read ?? 看一下內容解釋?try pread?
01/11 10:30, 1F
文章代碼(AID): #19QJukeB (Programming)
文章代碼(AID): #19QJukeB (Programming)