通过TCP / IP套接字的XML消息

时间:2010-01-03 09:29:53

标签: c xml sockets connection parsing

我正在使用C并且想要知道,就通过套接字连接进行通信而言,XML消息是否优于文本消息?

  1. 还有其他好的选择可用于XML吗?
  2. 哪个是可用于在C中解析XML的最佳解析器(或解析选项)?
  3. C是否有任何标准库并有助于解析XML消息?

4 个答案:

答案 0 :(得分:5)

  1. 您可以自行设计协议。您可以使用文本或二进制通信。无论使用何种格式,您都可以决定如何序列化/反序列化和解释数据。如果使用XML,则可以利用XMLRPC或SOAP。您也可以使用JSONRPC。上次在我的项目中,我以一种非常简单而有效的方式使用二进制文件:第一次识别要调用的方法/函数。接下来的2个字节用于通知数据长度(最多64K - 1个字节),其余为数据。注意大/小Endianess。

  2. 这是非常主观的。您可以使用验证或非验证解析器。 TinyXML是轻量级的。您可以查看MiniXML和Expat。 libxml2更胖。

  3. 到目前为止,XML解析不在C或C ++的标准库中。您可以使用上述库。

  4. 祝你好运!

    编辑:

    顺便说一句,如果你想使用二进制格式来交换数据,只需使用以下3中的任何一种:

    1. http://tpl.sourceforge.net/ - C序列化库。

    2. http://www.s11n.net/c11n/ - 功能强大且复杂的C序列化库。

    3. Siseria - http://sourceforge.net/projects/siseria/,纯粹是C.我为嵌入式系统项目写的。它运行没有任何依赖,非常快!与其他2相比,mine非常简单,根本不使用堆和动态内存。一切都在堆叠中!

答案 1 :(得分:2)

有许多可能的解决方案。我想,在选择XML之前,我会先看一些其他选项。 XML有很多开销;除非你要压缩你的流,否则它可能有点贵。 XML对于人类来说也不容易编辑,当然比二进制格式更容易。

您可能希望查看JSON,这是一种非常流行的格式,并且比XML简单得多。有很多可用的实现。

答案 2 :(得分:1)

我强烈推荐Google的数据交换格式Protobuf。我们将它用于两个进程之间的通信,它运行良好。它内置了对C ++,Python和Java的支持,以及为其他一些人提供的第三方库(Jon Skeet维护着C#端口)。

答案 3 :(得分:0)

主要问题是您的表现要求是什么。

如果您要每秒发送一条消息,请随意。如果您的一端有人机界面,请使用XML或任何其他文本格式。

如果您设计机器对机器接口,则您更愿意考虑二进制数据。在这种情况下,请记住将所有内容转换为网络标准字节顺序。