2013-07-04 91 views
0

我要問以下問題:編碼併發送XDR結構通過TCP套接字(C - Linux)的

我發送以下XDR消息:

struct Responde{ 
float numbers<>; 
bool end; 
} 

我知道如何enconde數組(xdr_array)和布爾(xdr_bool),但我怎麼能:

1)編碼結構? 2)通過套接字發送結構?

感謝所有人,但我不知道XDR,我必須使用它。再次感謝。

N.b .:標題如何顯示我指的是C語言和Linux環境。

+0

請問'<>'是什麼? – alk

+0

這意味着這是一個最大長度爲2^32-1的可變長度數組 – user2467899

+0

您可能想要閱讀這裏:http://docs.oracle.com/cd/E19683-01/816-1435/6m7rrfn7f /index.html(向下滾動到「傳遞複雜數據結構」) – alk

回答

0

最靈活的解決方案當然是使用rpcgen工具將XDR定義編譯爲C代碼,然後您可以在C應用程序中編譯和使用該代碼。但是如果你不想在你的項目中引入這個依賴項,你當然可以手動編寫序列化代碼。

RFC 1831會給你這樣的結構是如何序列化的詳細說明,但這裏是你需要知道你的情況例如:

  • 在XDR所有號碼都以big-endian順序編碼。
  • 結構中的所有字段都對齊到4個字節,並且按聲明順序將字段連接起來。
  • A float將數字編碼爲32位浮點數。
  • 浮點數的可變長度數組被編碼爲一個32位整數,其中包含浮點數跟隨的元素數。
  • A bool將布爾值編碼爲32位整數,其中真值被編碼爲數字1,而假值被編碼爲數字0

例如,如果你的結構充滿了3個浮標和值true,你會得到下面的字節流:

00 00 00 03 xx xx xx xx yy yy yy yy zz zz zz zz 00 00 00 01 

xyz序列是浮點數字。

相關問題