繁体   English   中英

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

[英]XML messages over a TCP/IP socket

我正在使用C,想知道就套接字连接通信而言,XML消息是否比文本消息更可取?

  1. 是否还有其他不错的选择而不是XML?
  2. 哪个是可用于在C语言中解析XML的最佳解析器(或解析选项)?
  3. C随附任何标准库来帮助解析XML消息吗?
  1. 您设计协议,以便您决定。 您可以使用文本或二进制通信。 无论使用哪种格式,您都可以决定如何序列化/反序列化和解释数据。 如果使用XML,则可以利用XMLRPC或SOAP。 您也可以使用JSONRPC。 上一次在我的项目中,我以一种非常简单而有效的方式使用了二进制文件:第一个标识要调用的方法/函数。 接下来的2个字节用于通知数据长度(最大64K-1个字节),其余为数据。 注意大/小耐力。

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

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

祝好运!

编辑:

顺便说一句,如果您想使用二进制格式交换数据,则只需使用以下3种方法之一:

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

  2. http://www.s11n.net/c11n/-一个强大而复杂的C序列化库。

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

有许多可能的解决方案。 我认为在选择XML之前,我会考虑其他一些选择。 XML有很多开销。 除非您要压缩流,否则可能会有点昂贵。 XML对于人类来说也不容易编辑,尽管当然比二进制格式更难。

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

我强烈推荐Google的数据交换格式Protobuf 我们正在使用它在两个进程之间进行通信,效果很好。 它内置了对C ++,Python和Java的支持,并为其他许多库提供了第三方库(Jon Skeet维护C#端口)。

主要问题是您对性能的要求是什么。

如果您打算每秒发送一条消息,请放心。 如果一端具有人机界面,请使用XML或任何其他文本格式。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM