客户端服务器在互联网上的应用
client server application in c++ over internet
我想通过不同的计算机(通过互联网)访问c++应用程序。c++应用程序将连接到数据库。我已经知道了做这件事的不同方法(如果我没有错的话)-
- 在c++程序中运行http服务器
- 插座
- socket程序作为web服务器
- 使用tcp/ip
什么能符合我的目的。
首先,您可能应该查找OSI模型来了解这些"选项"的位置,因为您似乎对它们是什么感到困惑。
首先,套接字只是处理连接、任何连接的编程方式。因此,这并不是一个真正的"选项",因为从软件的角度来看,这只是任何网络连接的通用术语。这使得你的"选项2"基本上毫无意义。
其次,互联网上几乎所有东西的传输协议都是TCP/IP。唯一的另一个通用选项是UDP/IP,它对大多数任务来说不够可靠(大多只适用于本地封闭网络上的特定高带宽任务)。当然,这在OSI模型级别上仍然很低,也就是说,它不是你问题的解决方案,因为你的问题处于最高的OSI级别,即"应用程序"级别。所以,这也让你的"选项4"变得毫无意义(它太低级了,就好像有人问"我该怎么盖房子?"而你回答"用锤子。")
第三,http服务器只是众多网络服务器中的一种。网络服务器实际上只是一个监听客户端连接(来自网络)的程序。所以,很明显,你需要创建一个网络服务器,因为这就是你自己所说的,即创建一个可以从互联网上的其他计算机访问的C++应用程序:我们称之为网络服务器。因此,这也使得你的"选项3"毫无意义,因为它只是你问题陈述的重复,而不是它的解决方案
因此,您真正应该关注的是确定您可以使用或创建的应用程序级协议适合您的预期应用程序。
像HTTP这样的成熟协议是福也是祸。它们非常复杂,因此很难理解,更不用说正确实现了。因此,您可能会选择现成的库来处理该协议,但这可能是一个重要的(且庞大而复杂的)依赖项,需要引入到您的项目中。但是,您确实可以从一个更健壮的协议中获益,该协议还可以轻松集成安全性(例如HTTPS)。您可能希望查看HTSQL,了解特定于数据库的基于HTTP的协议。
另一种选择是创建自己的自定义简单协议。如果你的任务很简单,这不需要很复杂。例如,如果您只想中继数据库查询,那么您的协议可以像只包含SQL查询一样简单。
最后,还有许多库实现了所谓的RPC(远程过程调用),这是一种无缝调用由另一台计算机(例如服务器)上的另一个程序执行的函数的方法。这允许您从等式中删除协议,因为它都由RPC库处理。在服务器应用程序上,只需发布要公开的函数,而在客户端,只需与服务器建立连接并像调用任何其他正常函数一样调用这些函数。
我想说,这实际上是你的三个主要选择:使用现有的通用协议,如HTTP;创建自己的简单协议;或者使用RPC(或类似的)库。选择哪个选项实际上取决于您需要在客户端和服务器之间完成的特定任务的细节。
Boost,Qt,其他库。每种方法都实现了自己的tcp/ip、套接字等方法。比较并选择。当然,您必须自己实现http例程。
- 试图在visual studio上用C++创建一个桌面应用程序
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- c++r值引用应用于函数指针
- 在C应用程序中运行C++(带有STL)函数
- 使用VerQueryValue检索应用程序的文件描述
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 使用调试/崩溃报告将应用程序部署到客户端
- C++控制台应用程序阻止退出
- 码头化的C++应用程序是否向后兼容早期的内核版本
- esp8266互联网交换机问题
- 将应用程序从32位移植到64位时出现问题
- 有没有任务栏API可以立即应用注册表更改
- 如何改变c++应用程序的视觉效果
- WM_CTLCOLORSTATIC从未在WIN32应用程序中触发
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 示例外壳应用程序显示的 V8 "segmentation fault (core dumped)"错误
- phytec phyBOARD iMX-6在从闪存而不是SD卡运行qt5 opengles应用程序时表现不佳(FPS减半
- 在应用程序中检查互联网连接C++可靠方法:gethostbyname() 失败
- 如果没有互联网,getaddrinfo()会在android中阻止应用程序