如何使用c++网络编程进行数据交换

how to exchange data using c++ network programmimg?

本文关键字:数据 交换 网络编程 何使用 c++      更新时间:2023-10-16

----------------更新2015.12.13----------------

目前,我正在开发一个在windows上具有网络功能的程序

假设有四台PC,我选择一台作为主节点,其他是从节点。从节点需要向主节点传递xml文件(仅一次)和一些其他实时信息(例如:每5秒传递一次数据)。

我对网络编程一无所知。是否存在可以处理此问题的框架

至于如何解决这个问题,我有一些要点无法选择:

  1. 哪个库或框架易于使用?winsocketPOCOQT networkframe或其他?

  2. 我应该关注网络的哪个级别?socket?或者只是使用已经打包好的HTTP request,这样就不需要关心套接字的实现了?

  3. 由于必须传递一些实时信息,设计这种网络功能有什么要点吗

一种可能性是将"网络"部分完全抽象掉,并使用众多RPC机制中的一种,这样客户端只需将参数传递给一个函数,然后不久,就会在服务器上使用相同的参数调用一个函数。

举个例子,我已经用过很多次这样的ApacheThrift了。最近我也用谷歌RPC做了一些工作。两者似乎都有效,尽管Thrift绝对是两者中更成熟的一个。根据您的需求,还有很多其他选择。

有很多方法可以做到这一点。最简单的是不使用网络API本身。使用文件系统。从机可以向服务器写入,一旦从机完成写入,服务器就会拾取文件。您可以依靠窗口来强制执行SHARE_READ/SHARE_WRITE。如果客户端使用SHARE_NONE创建文件,那么在关闭文件之前,其他人都无法打开该文件。只有在客户端断开网络连接、崩溃等情况下,这才会失败。更稳健的方法是,客户端创建名称为"\server name\sharename\client_X_TEMP.xml"的文件,并且当它准备好供服务器使用时,重命名为"\server name\sharename\server_PLEASE_README_NOW.xml"。服务器将只查找名称正确的文件。看起来技术含量很低,但它安全、便携、坚固,而且易于工作。由于您不需要任何特殊的API,因此可以用任何可以访问文件系统的语言编写客户端和服务器。

如果要使用直接网络API,可以使用DCOM。它允许您为要调用的客户端和要实现的服务器指定一个类似C/C++的接口。它处理序列化数据和传输到另一台机器的所有复杂性。这真的很灵活,客户端和服务器在同一个进程中,不同的进程在同一台机器上,或者在不同的机器上。(多年来,微软对这项技术的称呼很多。"基础"层是"RPC",然后是COM、D-COM、ActiveX,也许还有其他一些名字。

套接字很容易设置,比DCOM更容易移植,但相当"原始"。您需要发明自己的协议来发送数据,因为套接字只是传输数据串。

HTTP只是一种通常通过套接字传输的协议。这里的优点是有许多不同的HTTP库和许多现成的服务器。例如,IIS可以用来处理传入的请求,并自动将它们交给您的代码——您可以通过多种方式对服务器进行编码,Microsoft的Visual Studio对此提供了很好的支持。

我没有使用poco或QT,所以我不能发表评论。