如何使用c ++ network programmimg交换数据?

时间:2015-12-10 16:13:53

标签: c++ networking winsock poco qtnetwork

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

目前,我正在开发一个在 windows

上具有网络功能的程序
  

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

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

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

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

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

    < / LI>
  3. 由于必须传递一些实时信息,设计这个网络功能有什么重点吗?

2 个答案:

答案 0 :(得分:0)

一种可能性是完全抽象出“网络”部分,并使用众多RPC机制之一,因此客户端只需将参数传递给函数,然后不久,在服务器上调用一个函数,相同的参数。

仅举一个例子,我曾经多次使用Apache Thrift。最近我使用Google RPC做了一些工作。两者似乎都有效,尽管Thrift肯定是两者中比较成熟的。根据您的需求,还有更多可供选择的可能性。

答案 1 :(得分:0)

有很多方法可以做到这一点。 最简单的是不使用网络API本身。 使用文件系统。 从站可以写入服务器,服务器将在从站完成写入后获取文件。您可以依赖窗口来强制执行SHARE_READ / SHARE_WRITE。如果客户端使用SHARE_NONE创建文件,那么在关闭文件之前,没有其他人可以打开该文件。如果客户端丢弃网络连接,崩溃等,这只会失败。更健壮的方法是客户端创建名称为&#34; \ server-name \ sharename \ CLIENT_X_TEMP.xml&#34;的文件,当服务器准备好使用它时,重命名为&#34; \ server-name \ sharename \ _SERVER_PLEASE_README_NOW.xml&#34;。服务器只会查找正确名称的文件。 看起来很低技术,但它安全,便携,强大,易于工作。由于您不需要任何特殊的API,因此您可以使用任何有权访问文件系统的语言编写客户端和服务器。

如果要使用直接网络API,可以使用DCOM。它允许您为客户端调用和要实现的服务器指定类似C / C ++的接口。它处理序列化数据和传输到另一台机器的所有复杂性。这非常灵活,客户端和服务器处于相同的进程,同一台机器上的不同进程或不同的机器上。 (微软多年来以多种名称称呼这项技术。&#34; base&#34;层是&#34; RPC&#34;,然后是COM,D-COM,ActiveX,可能还有一些其他名称。

套接字非常容易设置,并且比DCOM更容易移植,但是相当简单&#34; raw&#34;。您需要发明自己的协议来发送数据,因为套接字只是传输数据束。

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

我没有使用过poco或QT,所以我无法发表评论。