全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2042
推到 Plurk!
推到 Facebook!

用socket傳檔案

尚未結案
millerh
一般會員


發表:10
回覆:10
積分:4
註冊:2004-12-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-05 15:59:22 IP:61.230.xxx.xxx 未訂閱
我用C 寫socket傳檔案 但試了好幾次 只有傳.txt的檔案叫成功 其他的開出來的檔案都有問題 請問高手能幫我看看嗎 謝謝~ 傳送端的程式碼如下: fptr=fopen("C:\\1.jpg","rb"); if(fptr!=NULL) { while(fread(str,sizeof(char),MAXLINE,fptr)) { if( send(sd,str,strlen(str),0)==SOCKET_ERROR) { printf("CLIENT: send() error."); exit(1); } memset(str,0,MAXLINE); } fclose(fptr); cout<<"傳送中....."<<"\n"; } 接收端的程式碼如下: fptr=fopen("test.jpg","wb"); while (1) { if ( (n=recv(cli_sd, str, MAXLINE, 0))==0) { fprintf(stderr, "echo_srv: connection closed\n"); break; } else if (n==SOCKET_ERROR) { fprintf(stderr, "echo_srv: recv() error!\n"); break; } fwrite(str,sizeof(char),strlen(str),fptr); }//end of while fclose(fptr);
Drt
一般會員


發表:1
回覆:1
積分:0
註冊:2004-09-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-08 15:59:40 IP:61.66.xxx.xxx 未訂閱
如果你是使用BCB 6.0來寫的話,建議不要使用fwrite() 因為BCB 6.0的fwrite會幫妳在檔案裡面多加入一些東西 你可以看看你寫完的檔案會比傳出的檔案還大一點點 如果你有Ultra Edit之類的編輯工具,比較一下被送出的檔案和被寫入的檔案 你就可以看到每經過幾十個Bytes,就會多出一個Byte 至於文字檔沒問題,可能是你的文字檔檔案夠小,所以還不會出現這樣的問題 而一般圖片檔案至少都有個幾K,就一定會出現這問題 你試試看其他的寫檔方式,應該就不會有這問題了
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-10 11:45:06 IP:203.69.xxx.xxx 未訂閱
引言:
if( send(sd,str,strlen(str),0)==SOCKET_ERROR)
你要傳的是BIN檔。當然會有 00 這種BYTE在檔案內容囉。 而你用STRLEN這個函數所取得的長度就不對了啦。 要用READ那邊回傳的長度做為你要傳送的長度。 ------------------- 高燒40度中
millerh
一般會員


發表:10
回覆:10
積分:4
註冊:2004-12-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-14 13:23:09 IP:61.230.xxx.xxx 未訂閱
引言:
引言:
if( send(sd,str,strlen(str),0)==SOCKET_ERROR)
你要傳的是BIN檔。當然會有 00 這種BYTE在檔案內容囉。 而你用STRLEN這個函數所取得的長度就不對了啦。 要用READ那邊回傳的長度做為你要傳送的長度。
那請問一下該用什麼取得長度才是正確的呢 謝謝~
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-12-15 10:16:22 IP:203.69.xxx.xxx 未訂閱
引言: 你要傳的是BIN檔。當然會有 00 這種BYTE在檔案內容囉。 而你用STRLEN這個函數所取得的長度就不對了啦。 要用READ那邊回傳的長度做為你要傳送的長度。
我不是說得很清楚了嗎?????
引言: while(fread(str,sizeof(char),MAXLINE,fptr))
去查一下 fread 的回傳值。 這種事不用我貼出來了吧。^_^ ---------------------------------------------------------- http://www.mcu51.com/list.asp?id=1588 想想別人怎麼學,我們有這麼用心嗎? 憂心啊~~~~~~
Ktop_Robot
站務副站長


發表:0
回覆:3511
積分:0
註冊:2007-04-17

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-04-18 17:33:23 IP:000.000.xxx.xxx 未訂閱
提問者您好:


以上回應是否已得到滿意的答覆?


若已得到滿意的答覆,請在一週內結案,否則請在一週內回覆還有什麼未盡事宜,不然,
將由版主(尚無版主之區域將由副站長或站長)自由心證,選擇較合適之解答予以結案處理,
被選上之答題者同樣會有加分獎勵同時發問者將受到扣 1 分的處分。不便之處,請見諒。


有問有答有結案,才能有良性的互動,良好的討論環境需要大家共同維護,感謝您的配合。

------
我是機器人,我不接受簡訊.
系統時間:2024-05-06 2:09:47
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!