如何使用c++网络编程进行数据交换
how to exchange data using c++ network programmimg?
----------------更新2015.12.13----------------
目前,我正在开发一个在windows上具有网络功能的程序
假设有四台PC,我选择一台作为主节点,其他是从节点。从节点需要向主节点传递xml文件(仅一次)和一些其他实时信息(例如:每5秒传递一次数据)。
我对网络编程一无所知。是否存在可以处理此问题的框架?
至于如何解决这个问题,我有一些要点无法选择:
-
哪个库或框架易于使用?
winsocket
?POCO
?QT networkframe
或其他? -
我应该关注网络的哪个级别?
socket
?或者只是使用已经打包好的HTTP request
,这样就不需要关心套接字的实现了? -
由于必须传递一些实时信息,设计这种网络功能有什么要点吗
一种可能性是将"网络"部分完全抽象掉,并使用众多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,所以我不能发表评论。
- 如何将 std::vector 索引交换到<int>数据,将数据交换到索引
- 在UNIX中通过recv/send交换数据时,如何正确使用缓冲区
- 数据交换在CPropertyPage中完成::OnOK?
- TCP 连接中的超时,没有数据交换
- 如何将 Matlab 与 Visual Studio 连接以进行实时数据交换?
- 根据 C++ 中的特定数据交换这些对象
- (De/)序列化作为C++中基于文件的数据交换的接口
- 矢量和指针队列数据交换:深层和浅层副本
- 数据交换的设计模式
- 类 COpenGLControl 的两个实例之间的动态数据交换
- MATLAB和C++之间最有效的数据交换方式
- C++应用程序(Sci)Python之间的数据交换
- 如何使用c++网络编程进行数据交换
- std::带有数据交换的矢量指针
- MPI进程之间的数据交换(halo)
- 使用PHP和c++进行数据交换
- MFC数据交换验证
- linux上c++线程间的线程安全数据交换/共享内存
- 使用wininet与服务器进行数据交换
- 2 个本地服务器(C++上的逻辑服务器和用于网页的 Web 服务器)数据交换.如何