【问题标题】:client server application in c++ over internet [closed]互联网上的C++客户端服务器应用程序[关闭]
【发布时间】:2014-09-07 04:41:22
【问题描述】:

我想通过不同的计算机(通过互联网)访问一个 c++ 应用程序。c++ 应用程序将连接到一个数据库。我已经知道了不同的​​方法(如果我没记错的话)-

  • 在 C++ 程序中运行 http 服务器
  • 套接字
  • socket 程序作为 Web 服务器。
  • 使用 tcp/ip

什么可以满足我的目的。

【问题讨论】:

  • 您的第一个和第三个选项似乎相同。并且二和四彼此相似(也可以描述一和三)。例如,每个 Web 服务器都是一个实现 http(或 https)的 tcp/ip 套接字程序。
  • 您的问题听起来对您来说使用现有的 HTTP 服务器并使用 CGI 之类的东西将其连接到您的 C++ 应用程序会更好。作为一个初学者(我认为无论是 C++ 还是网络编程),自己正确实现 HTTP 将是一项艰巨的任务。
  • P.S.:以下是关于该主题的快速 SO 搜索:stackoverflow.com/questions/14892955/…

标签: c++ client-server


【解决方案1】:

首先,您可能应该查看 OSI 模型以了解这些“选项”的位置,因为您似乎对它们是什么感到困惑。

首先,套接字只是您处理连接(任何连接)的编程方式。所以,这并不是一个真正的“选项”,因为从软件的角度来看,它只是任何网络连接的通用术语。这使您的“选项2”基本上没有意义。

其次,互联网上几乎所有东西的传输协议都是 TCP/IP。唯一的其他通用选项是 UDP/IP,它对于大多数任务来说不够可靠(主要只适用于本地封闭网络上的特定高带宽任务)。当然,这在 OSI 模型级别上仍然很低,也就是说,它不是您问题的解决方案,因为您的问题处于最高的 OSI 级别,即“应用程序”级别。所以,这也让你的“选项 4”变得毫无意义(它太低级了,好像有人问“我如何建造房子?”而你回答“用锤子”)。

第三,http 服务器只是众多网络服务器中的一种。 Web 服务器实际上只是一个侦听客户端连接(来自 Web)的程序。因此,显然,您需要创建一个 Web 服务器,因为这就是您自己所说的,即创建一个可以从 Internet 上的其他计算机访问的 C++ 应用程序:我们称之为 Web 服务器。因此,这也使您的“选项 3”变得毫无意义,因为它只是重复了您的问题陈述,而不是解决问题的方法。

因此,您真正应该关注的是确定您可以使用或可以创建适合您预期应用程序的应用程序级协议。

像 HTTP 这样的成熟协议既是福也是祸。它们非常复杂,因此很难理解,更不用说正确实施了。因此,您可能会选择一个现成的库来处理该协议,但这可能是一个重要的(并且是大而复杂的)依赖项,需要引入到您的项目中。但是您确实可以从更强大的协议中受益,同时还可以轻松集成安全性(例如 HTTPS)。您可能希望查看 HTSQL 以了解特定于数据库的基于 HTTP 的协议。

另一种选择是创建您自己的自定义和简单协议。如果您的任务非常简单,这不需要非常复杂。例如,如果您只想中继数据库查询,那么您的协议可以像只包含 SQL 查询一样简单。

最后,还有许多库实现了所谓的 RPC (Remote Procedure Call),这是一种无缝调用由另一台计算机上的另一个程序执行的函数的方法(例如,服务器)。这允许您从等式中删除协议,因为它全部由 RPC 库处理。在服务器应用程序上,您只需发布要公开的函数,在客户端,您只需与服务器建立连接并像调用任何其他正常函数一样调用函数。

我想说,这实际上是您的三个主要选择:使用现有的通用协议,如 HTTP;创建自己的简单协议;或者,使用 RPC(或类似)库。选择哪个选项实际上取决于您需要在客户端和服务器之间完成的特定任务的详细信息。

【讨论】:

  • 非常感谢您的回复。我想知道的最后一件事是客户端(来自其他计算机)是否能够像我一样与我的程序进行交互只需在保存它的同一台机器上运行应用程序。
  • @user3311810 是的,这基本上就是 RPC 的意义所在。与与本地应用程序交互相比,存在一些小的差异,但在其他方面几乎相同。
【解决方案2】:

Boost、Qt、其他库。每个都为 tcp/ip、sockets 等实现了自己的方法。比较和选择。当然,你必须自己实现http例程。

【讨论】:

  • 感谢您的回复,但我想知道实现上述问题需要什么(比如我需要实现 http 服务器还是我可以单独使用套接字)。
  • Http 服务器并不像看起来那么简单。那么,你需要什么?..首先 - 学习 OSI 模型(这对理解很重要)。例如,boost 库为 tcp 提供了高级和跨平台的方法。第二 - 了解更多关于 HTTP 和 try-try-try 编写你的第一个服务器 =)
猜你喜欢
  • 2012-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-10
相关资源
最近更新 更多