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

how to exchange data using c++ network programmimg?

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

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

上具有网络功能的程序

Assume that there are four PCs,I choose one as the master node and others are slave nodes.slave nodes need to pass xml files(only once) and some other real-time information(eg:pass data every 5 seconds) to the master node.

我对网络一无所知programming.Does有一个框架可以处理这个吗?

关于如何解决这个问题,我有几个要点我无法做出选择:

  1. 哪个库或框架好用?winsocket?POCO?QT networkframe还是其他的?

  2. 我应该关注哪一层网络?socket?还是直接使用已经打包好的HTTP request,这样就不需要关心socket的实现了?

  3. 因为要传递一些实时信息,所以设计这个网络功能有什么重点吗?

一种可能性是将 "network" 部分完全抽象出来,并使用许多 RPC 机制中的一种,这样客户端只需将参数传递给一个函数,不久之后,调用一个函数您的服务器具有相同的参数。

仅举一个例子,我也使用了 Apache Thrift like this a number of times. Recently I've done a bit of work using Google RPC。两者似乎都有效,尽管 Thrift 绝对是两者中更成熟的一个。根据您的需要,还有更多的可能性可供选择。

有很多方法可以做到这一点。 最简单的方法是不使用网络 API 本身。 使用文件系统。 从属可以写入服务器,一旦从属完成写入,服务器将获取文件。您可以依靠 windows 来执行 SHARE_READ / SHARE_WRITE。如果客户端使用 SHARE_NONE 创建文件,则在关闭文件之前,其他任何人都无法打开该文件。这只会在客户端断开网络连接、崩溃等情况下失败。更可靠的方法是让客户端创建名称类似于“\server-name\sharename\CLIENT_X_TEMP.xml”的文件,并且当它是准备好让服务器使用它,重命名为“\server-name\sharename\SERVER_PLEASE_README_NOW.xml”。服务器只会查找名称正确的文件。 看起来技术含量低,但它安全、便携、坚固且易于使用。由于您不需要任何特殊的 API,您可以使用任何可以访问文件系统的语言编写客户端和服务器。

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

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

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

我没用过poco和QT所以不好评价