主題:怎么傳輸一個(gè)結(jié)構(gòu)體? 共有70271人關(guān)注過本帖 |
---|
lm |
1樓 |
![]() |
怎么傳輸一個(gè)結(jié)構(gòu)體? ![]()
在pc機(jī)上,發(fā)送端把這個(gè)結(jié)構(gòu)體送到字符緩沖區(qū)中,接收端通過一個(gè)
字符緩沖區(qū)接收,然后強(qiáng)制轉(zhuǎn)換為結(jié)構(gòu)體類型,這種方法傳輸結(jié)構(gòu)體 不會(huì)出錯(cuò)。 我在NB200上用同樣思路傳輸結(jié)構(gòu)體,接收結(jié)果不正確,請(qǐng)問該如何設(shè)計(jì)此程序? |
單帖管理 | 引用 | 回復(fù) ![]() |
lm |
2樓 |
![]() |
![]()
補(bǔ)充一點(diǎn),我的相關(guān)代碼如下:
結(jié)構(gòu)體定義:typedef struct { char a; ... short b; ... }univdata; 用字符型指針指向此結(jié)構(gòu)體: univdata *asdu; asdu=(univdata *)malloc(sizeof(univdata)); asdu->a=<|>p<|>;      /*結(jié)構(gòu)體賦初值*/ ... char *txbuf=(char *)asdu;  發(fā)送此結(jié)構(gòu)體: ConnWrite(conno,txbuf,len,1); btw:傳輸字符串的結(jié)果是正確的,說明程序沒有問題。請(qǐng)問對(duì)結(jié)構(gòu)體該如何處理? |
單帖管理 | 引用 | 回復(fù) ![]() |
zhl |
3樓 |
![]() |
![]()
將結(jié)構(gòu)類型強(qiáng)制轉(zhuǎn)換為char類型后,再調(diào)用ConnWrite(...)函數(shù)進(jìn)行發(fā)送,其中l(wèi)en為該結(jié)構(gòu)的長(zhǎng)度。看你的代碼沒有問題,再看看是否有別的什么原因造成呢?
|
單帖管理 | 引用 | 回復(fù) ![]() |
lm |
4樓 |
![]() |
![]()
我找不出原因,但考慮到可能是字節(jié)對(duì)齊和主機(jī)網(wǎng)絡(luò)字節(jié)順序的問題
NB200的tcp/ip運(yùn)行庫(kù)沒有提到這方面的問題,請(qǐng)問對(duì)此是如何處理的? |
單帖管理 | 引用 | 回復(fù) ![]() |
zhl |
5樓 |
![]() |
![]()
可參考我們提供的TCPDEMO程序中的TCPSvr.prj,在該程序有關(guān)于接收數(shù)據(jù)結(jié)構(gòu)(結(jié)構(gòu)內(nèi)容包括時(shí)間、日期等)的應(yīng)用。
|
單帖管理 | 引用 | 回復(fù) ![]() |