看板 Programming 關於我們 聯絡資訊
目前在練習寫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
sjrom:man 一下read ?? 看一下內容解釋?try pread? 59.117.69.64 01/11 10:30