2010-01-03 46 views
1

我正在使用C并希望知道XML消息是否优于文本消息,只要通过套接字连接进行通信?通过TCP/IP套接字的XML消息

  1. 是否有其他可用的选择,而不是XML?
  2. 哪个是解析C语言中最好的解析器(或解析选项)?
  3. 是否有任何标准库随C一起提供,并有助于解析XML消息?

回答

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

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

  3. 到目前为止XML解析不在C或C++的标准库中。你可以使用前面提到的库。

祝你好运!

编辑:

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

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

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

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

2

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

你可能想看看JSON,这是一个非常流行的格式,是远远超过XML简单。有很多可用的实现。

+0

+1推荐用于Protobuf的JSON – 2010-01-06 13:09:15

1

我强烈推荐Google的数据交换格式Protobuf。我们正在使用它来进行两个进程之间的通信,这很好。它内置了对C++,Python和Java的支持,以及针对其他一些(Jon Skeet维护C#端口)的第三方库。

+0

+1。它现在越来越多地被使用了,我知道的是MySQL – 2010-01-06 13:10:02

0

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

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

如果你设计一个机器对机器的界面,你应该考虑二进制数据。请记住在这种情况下将所有内容都转换为网络标准字节顺序。

+0

的Drizzle分叉是的,我将每秒发送一条消息 – 2010-01-07 05:17:19