我正在使用C并且想要知道,就通过套接字连接进行通信而言,XML消息是否优于文本消息?
答案 0 :(得分:5)
您可以自行设计协议。您可以使用文本或二进制通信。无论使用何种格式,您都可以决定如何序列化/反序列化和解释数据。如果使用XML,则可以利用XMLRPC或SOAP。您也可以使用JSONRPC。上次在我的项目中,我以一种非常简单而有效的方式使用二进制文件:第一次识别要调用的方法/函数。接下来的2个字节用于通知数据长度(最多64K - 1个字节),其余为数据。注意大/小Endianess。
这是非常主观的。您可以使用验证或非验证解析器。 TinyXML是轻量级的。您可以查看MiniXML和Expat。 libxml2更胖。
到目前为止,XML解析不在C或C ++的标准库中。您可以使用上述库。
编辑:
顺便说一句,如果你想使用二进制格式来交换数据,只需使用以下3中的任何一种:
http://tpl.sourceforge.net/ - C序列化库。
http://www.s11n.net/c11n/ - 功能强大且复杂的C序列化库。
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或任何其他文本格式。
如果您设计机器对机器接口,则您更愿意考虑二进制数据。在这种情况下,请记住将所有内容转换为网络标准字节顺序。