資料傳輸方式

2021-06-26 14:47:49 字數 1338 閱讀 5738

環境限定:tcp/ip下的socket網路傳輸;c/c++開發語言,32/64位機。

目前有兩種方式對資料進行傳輸:1)字元流形式,即將資料用字串表示;2)結構型方式,即將資料按型別直接傳輸。

1)的方式保證所有的資料都是清晰的字串明文,沒有平台不一致問題,但傳輸的資料不定長,復合資料型別(如struct)的解析不方便。

2)的方式保證資料長度固定/可控,方便對接受到資料的解析;但前提是要考慮平台不一致問題,如位元組序、對齊位寬、資料型別等;

兩種資料傳輸方式應用時的注意點:

1)字元流形式 -- 需要協商好資料的解析方式,考慮到資料不定長可能導致的問題。

2)結構形式 -- 主要注意平台不一致導致的問題。

字元流傳輸方式相對簡單、安全,以結構方式傳輸則不同。結構形式傳輸資料時,要檢查下面各點:

1)首先要清楚是否有機器位寬不一致的情況,如32位機和64位機。如果位寬不一致,則避免傳輸表示方式不一致的資料型別,如long、float型在32位了64位下表示方式不一致,會導致資料解析錯誤。

2)確認通訊雙方的對齊位寬一致,或自己保證傳輸的資料結構在對齊調整後不會產生大小不一致。如果收發雙方的對齊方式分別是按4和8位元組對齊,則需要在程式中明確制定對齊位寬;或者調整資料的結構,確保在對齊調整後,收/發的資料中每一項的偏移量一致。

3)盡量對發出去的資料都轉換成網路位元組序,接收後轉換回本地位元組序,特別是機器字節序不一致時,現有的位元組序轉換函式不能滿足所有需求。

4)某些資料型別的表示方式有不同,如浮點數(一般用ieee 794標準),不能認為正確的傳了乙個位元組序正確的8位元組double型就對了,不同平台對double型的表示方式不同,比如傳送1.003,接受沒問題,結果卻得到了其它的數值。

傳結構型資料時對位元組序和浮點數的處理,以下的兩點網上的資料不多,詳細記錄一下:

1)目前沒有對8位元組或以上資料型別的轉換函式,需要自己實現,網上有很多,下面例舉乙個:

uint64_t htonll(uint64_t n)

uint64_t ntohll(uint64_t n)

如果有更長的資料(12位元組...),以此類推。

2)對浮點數之類的資料,如果要完全準確,那麼用字串傳送。如果直接傳資料,仍要處理位元組序,同時確保收發雙方對浮點數的表示方式一致。下面是兩個double型的位元組序轉換函式:

double ntoh_double(double net_double)

double hton_double(double host_double)

上述函式之所以沒有對host_double/net_double直接轉成uint64_t時會導致資料截斷。

資料傳輸方式

資料傳輸方式 1 並行傳輸與序列傳輸 並行傳輸指的是資料以成組的方式,在多條並行通道上同時進行傳輸。常用的就是將構成一 個字元 的幾位二進位製碼,分別在幾個並行通道上進行傳輸。例如,採用8單位 的字 符 可以用8個通道並行傳輸。一次傳送乙個字元,因此收 發雙方不存在字元的同步問題,不需要另加 起 止...

資料傳輸方式

本文摘自原文 定義 socket也稱作 套接字 實現伺服器和客戶端之間的物理連線,並進行資料傳輸。協議 主要有udp和tcp兩個協議,處於網路協議的傳輸層。優點 1 傳輸資料為位元組級,傳輸資料可自定義,資料量小 對於手機應用講 費用低 2 傳輸資料時間短,效能高。3 適合於客戶端和伺服器端之間資訊...

HTTP XML方式介面資料傳輸

一.客戶端 1.請求url 如http 10.46.34.233 fcgi bin uig sfc 186 2.傳送請求資料 組裝報文格式傳送資訊 傳送報文格式傳送資訊 http的請求url http的post方式進行資料傳輸 conn.setdoinput true conn.setdooutpu...