2013-07-04 56 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序列是浮点数字。

相关问题