【问题标题】:What's the best(easiest) way to transfer data on C/C++在 C/C++ 上传输数据的最佳(最简单)方法是什么
【发布时间】:2010-01-07 12:19:51
【问题描述】:

目前我正在开发 C/C++ 跨平台客户端/服务器软件。在低级套接字开发方面,我是一位非常有经验的开发人员。 Berkley 套接字/Winsock 的问题在于,您总是必须制作某种解析器才能在接收端正确处理。我的意思是,您必须解释数据并连接数据包才能正确传输。 (数据包经常被切片)

请记住,通信将是双向的。纯套接字是当今传输数据的最佳方式吗?你会推荐 SOAP、Web 服务或其他类型的封装到这个应用程序吗?

【问题讨论】:

    标签: c++ c web-services sockets soap


    【解决方案1】:

    我强烈推荐Google Protocol Buffers

    【讨论】:

      【解决方案2】:

      如今,许多人使用 Web 服务和 SOAP。有可用于此目的的 C++ 包。这些将为您使用套接字并处理所有数据争论。如果您在 Unix/Linux 上,提供或获取 System V.4 网络句柄,您的数据最终将通过套接字传输。

      在 Windows 上,如果您只想与其他 Windows 机器对话,还有其他选择。

      您也可以查看 CORBA,但这不是常见的做法。

      【讨论】:

        【解决方案3】:

        在任何数据传输中,都需要序列化和反序列化对象。

        您要问的第一个问题是您需要二进制还是文本格式进行传输。二进制数据格式具有明显的优势,即它们完全易于解析(假设它们是简单的 POD 结构 - 您可以将它们转换为结构)。

        基于文本的传输应该更容易调试,因为您可以只阅读文本。你仍然需要解析它们。

        基于 SOAP 的 Web 服务是简单的基于 XML 的数据包,通常通过 HTTP 发送。有些东西必须解析 HTTP 和 XML。易用性不是内在的,而是取决于您可以使用的工具。如果你有好的工具,当然可以,但同样适用于任何形式的数据交换。

        您可以查看Boost Serialization Library。这是一个相当复杂的库,并且确实需要您编写代码来指示哪些成员需要被序列化。 IT 确实对文本(包括 xml)和二进制序列化都有很好的支持。它也是跨平台的。

        【讨论】:

        • 如果传输的两边架构相同,则不需要序列化。
        • 序列化是最简单的部分。我认为最糟糕的部分是解析接收缓冲区上的对象并提取它们。这就是我问的原因。
        • 解析是反序列化的过程。如果您使用二进制固定大小的结构,则无需进行任何解析 - 您只需将绑定数据转储到相关结构中即可。 @Neil - 即使您具有相同的架构,您也需要在内存中对数据进行可能复杂的表示,并以某种方式将其逐字节发送到网络中。序列化。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-09-30
        • 2010-12-03
        • 1970-01-01
        • 2011-12-11
        • 1970-01-01
        • 2011-03-21
        • 2010-09-23
        相关资源
        最近更新 更多