Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

請問RS-232通訊的傳檔問題

0 views
Skip to first unread message

尚未認證通過

unread,
Nov 10, 2001, 10:14:52 PM11/10/01
to
現在我可以很單純的傳字串,但是如果要傳檔的話,我就定了一個struct,但是就會出現問題,也就是收的那一方,資料接受不完全,會少收資料。
我訂了一個struct:
typedef struct{
char Buffer[256] ;//放檔案資料
int length ;//檔案長度
}info;

info fileinfo;
我就用WriteFile(hPort,&fileinfo,sizeof(fileinfo),&transfer,NULL) ;
另一方就是用ReadFile()來收,
然後將fileinfo.Buffer寫入檔案中,可是就是會lose資料,
因為我傳一個文字檔,傳完後,打開接收的檔案看內容,就看到最後一、二行的字都lose了。
但是如果我的struct是
typedef struct{
char ch ;//改為1Byte
int length ;
}info;

這樣的話,就可以正確的接收到完整的檔案,請問是怎麼回事呢?雖然這樣可以動作,可是在讀取檔案內容時會變得很慢,因為一次只讀1byte。
謝謝。

--
[m [1;34m※ 來源:‧蛋捲廣場 bbs.tku.edu.tw‧[FROM: 163.30.169.249] [m

votty

unread,
Nov 11, 2001, 6:06:31 AM11/11/01
to
==> lantim...@bbs.tku.edu.tw (尚未認證通過) 提到:
: 現在我可以很單純的傳字串,但是如果要傳檔的話,我就定了一個struct,但是就會出現問題,也就是收的那一方,資料接受不完全,會少收資料。

: 我訂了一個struct:
: typedef struct{
: char Buffer[256] ;//放檔案資料
: int length ;//檔案長度
: }info;
: info fileinfo;
: 我就用WriteFile(hPort,&fileinfo,sizeof(fileinfo),&transfer,NULL) ;
: 另一方就是用ReadFile()來收,
: 然後將fileinfo.Buffer寫入檔案中,可是就是會lose資料,
: 因為我傳一個文字檔,傳完後,打開接收的檔案看內容,就看到最後一、二行的字都lose了。
: 但是如果我的struct是
: typedef struct{
: char ch ;//改為1Byte
: int length ;
: }info;
: 這樣的話,就可以正確的接收到完整的檔案,請問是怎麼回事呢?雖然這樣可以動作,可是在讀取檔案內容時會變得很慢,因為一次只讀1byte。
: 謝謝。

你可以將檔岸切割成數個區段,一次只傳一個區段,在接收的一方先知道區段的大小
如果接收的一方在時間內沒有收到預期區段的大小就叫送的一方重送,不然就送下一
個區段;這個方式有個要點:送和收之間要建立溝通的機制。

--
[1;37;44m [0;37;44m▕ [0;37;40m
[1;37;44m 行到水窮處, [0;37;44m▕ [0;37;40m
[1;37;44m 坐看雲起時。 [0;37;44m▕ [0;37;40m
[1;37;44m [0;37;44m▕ [0;37;40m
[0;33m▔▔▔▔▔▔▔▔▔▔▔ [1;37;40m

--
◎ [1;31m龍 [32m貓 [33m資 [34m訊 [35m天 [36m地 [0m( [1mbbs.mgt.ncu.edu.tw [0m)
◎[ [1;33;46mvico [0m]From: h2-210-68-64.seed.net.tw

0 new messages