通过TCP套接字编码并发送XDR结构(C - Linux)

时间:2013-07-04 10:05:28

标签: c linux sockets xdr

我必须问下面的问题:

我必须发送以下XDR消息:

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

我知道如何enconde数组(xdr_array)和bool(xdr_bool),但我怎么能:

1)编码结构? 2)通过套接字发送结构?

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

N.b。:标题显示我是指C语言和Linux环境。

1 个答案:

答案 0 :(得分:0)

最灵活的解决方案当然是使用rpcgen工具将XDR定义编译为C代码,然后可以在C应用程序中编译和使用。但是,如果您不想将此依赖项引入项目,您当然可以手动编写序列化代码。

RFC 1831将详细介绍这种结构的序列化方式,但以下是您需要了解的示例:

  • XDR中的所有数字都以big-endian顺序编码。
  • 结构中的所有字段都对齐到4个字节,字段按声明的顺序连接。
  • float将数字编码为32位浮点数。
  • 浮点数的可变长度数组被编码为32位整数,其中包含元素的数量,后跟浮点数。
  • bool将布尔值编码为32位整数,其中true值编码为数字1,false值编码为数字0

例如,如果您的结构填充了3个浮点数并且值为true,那么您将获得以下字节流:

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

xyz的序列是浮点数。