【问题标题】:How to pass data as XML via sockets?如何通过套接字将数据作为 XML 传递?
【发布时间】:2009-12-18 08:38:59
【问题描述】:

我想在用 C/C++ 编写的套接字程序之间以XML schema 的形式交换数据。有人可以提供链接教程,描述在套接字程序之间交换 XML 模式的过程。

我有两个在不同操作系统中运行的软件工具,其中我与用 c/c++ 编写的套接字程序相结合。由于两者都使用XML,我想知道是否有一种简单的方法可以以 XML 文档的形式交换数据以运行模拟研究。

提前致谢。


问题是如何通过用 C/C++ 编写的套接字程序发送 xml 模式?这是一个exp:

--xml ---
...
<xs:element name="zone">
<xs:complexType>
<xs:sequence>
<xs:element name="Var_name" type="xs:string"/>
<xs:element name="var_value" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
@987654330 @

----- C/C++ ----
...
// 向服务器发送消息
if (send(csocket, buffer_snd, BUFSIZE, 0) > BUFSIZE)
cout ...

提前感谢您的帮助,

【问题讨论】:

  • 您能否更具体地说明要求?如果您只想交换 XML 编码的数据,那只不过是使用流行的 Berkeley 套接字 API 通过网络发送一段文本。网上有很多免费教程教你如何使用它。
  • 您好,感谢您的回复。我的问题不只是发送 ASCII 字符串(或您所说的文本),而是如何在客户端和服务器程序之间交换 xml 文档。
  • XML 文档是一个 ASCII 字符串。只有一个有更多的尖括号。
  • 是的!它是,但它不是我要找的?谢谢!
  • @mk:在下面的评论中,您表示您正在尝试使用 gSOAP。在发布的链接之后,有一个包含大量链接的教程,并且文档包括 Web 服务和 XML 的演示。也许您应该更新问题以准确指出您遇到了什么麻烦 - 您尝试过什么,什么不起作用,或者教程或文档的哪些部分对您没有意义 - 而不是要求您已经拥有的资源。

标签: c++ c xml sockets


【解决方案1】:

您可以考虑为此使用带有流式解析器的 XML 解析库,假设您可以依赖两端格式正确的文档 - 格式正确的 XML 是自定界的。 libxml2 之类的东西应该是合适的。

【讨论】:

    【解决方案2】:

    看来您想要的是在 XML Schema 中指定您的协议,然后自动生成允许您解析和序列化 XML 消息的 C++ 类。如果是这样,那么您可能想看看CodeSynthesis XSD,它是一个 XML Schema to C++ 编译器。它几乎完全符合您的要求。如果您想要更轻量级的版本,还有更适合移动/嵌入式开发的 XSD/e。

    【讨论】:

    • 非常感谢您的回答,太好了
    【解决方案3】:

    显然,gSOAP 包含相关代码,但不确定这是否是您要查找的内容。

    【讨论】:

      【解决方案4】:

      看看 HTTP 是如何做到这一点的 - 简单的标头指示后续有效负载的长度,以及一些额外的内容,例如时间戳和类型。您只需要告诉对方要从套接字读取多少字节,也许还有文件名。根据您的应用程序需求,您可能还希望向发送者返回确认。

      【讨论】:

        【解决方案5】:

        你可以使用expact library,这是一个很好的xml解析器,可以创建xml对象并可以发送

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-11-28
          • 1970-01-01
          • 2011-11-10
          • 1970-01-01
          • 2018-02-18
          • 2023-02-09
          • 2023-03-11
          相关资源
          最近更新 更多