1

我想实现一个许可证管理软件的服务器端。我在 LINUX 操作系统中使用 C++。

当软件启动时,它必须连接到检查权限并允许/禁止运行某些功能的服务器。

我的问题是关于跨互联网客户端和服务器之间通信的实现:

服务器将在互联网上拥有一个静态 IP,因此使用一个简单的 TCP/IP 套接字客户端连接到 TCP/IP 套接字服务器(提供 IP/PORT)就足够了吗?

我熟悉套接字通信,但不太熟悉互联网通信,所以我的问题是这是否是正确的方法,还是我需要使用不同的机制,如 http 客户端服务器或其他。

问候

AFG

4

2 回答 2

1

以下是使用 HTTP 作为传输的一些好处:

  • 更容易正确,更有可能在生产中工作:是的,您可能必须添加额外的依赖项来处理 HTTP(客户端和服务器端),但它仍然比另一个您必须实现、维护的本土协议更可取,关心向后兼容性,处理多平台问题(例如字节序)等。就实现的便利性而言,在常见情况下使用基于 HTTP 的解决方案应该容易得多(尤其是如果您为许可构建 REST 样式服务 API检查)。
  • 更多帮助:HTTP 作为 Web 的基础是当今使用最广泛的技术之一。您将遇到的大多数(全部?)问题可能都已公开记录在解决方案/解决方法中。
  • 加密“免费”:加密已经是一个已解决的问题(HTTPS/SSL),无论是在传输方面,还是在你最终必须实现的方面,这只是设置的问题。
  • 服务器身份验证“免费”:HTTPS/SSL 不仅解决了加密问题,还解决了服务器身份验证问题,因此客户端可以验证它是否真的在与正确的服务通信。
  • 保证在互联网上工作:HTTP/HTTPS 流量在互联网上很常见,因此您不会遇到难以穿越的路由问题或防火墙。使用您自己的协议时,这可能是一个问题。
  • 开箱即用的灵活性:您还可以减少客户端与服务器通信的限制,因为在许多不同的环境中构建客户端非常简单,只要他们可以使用 HTTP(可能还有 SSL),并且他们知道如何发布对您的服务器的请求(即您的服务 API 的样子)。
  • 易于与管理 webapp 集成:如果您希望允许用户以某种方式管理与许可证关联的帐户(更新联系信息等),那么您甚至可以将许可证服务器与该应用程序结合起来。如果有用,您还可以将许可证管理 UI 部分构建到同一个应用程序中。

最后一点(这对您的客户端 HTTPS/SSL 实施施加了额外的限制):您甚至可以使用客户端 SSL 证书,这实际上允许对服务器进行客户端身份验证。根据您使用它们的方式,客户端证书更难管理,但它们可以是例如。已过期或已撤销,因此在某种程度上它们实际上许可证(用于连接到服务器)。

于 2013-03-11T11:19:51.227 回答
0
  • HTTP 不是一种不同的机制。它是通过 TCP/IP 连接运行的协议。
  • Internet 仅使用 IP 传输。您可以在它之上使用 UDP、TCP 或 SCTP 会话(嗯,UDP 不是一个很大的会话)层。TCP 是一般的选择。
  • 套接字是操作系统接口。它们是大多数系统中唯一的网络接口,但有些系统具有不同的接口。与运输本身无关。
  • IP 地址实际上与网络拓扑相关联,因此我强烈反对将 IP 地址硬编码到服务器中。如果您出于任何原因必须更改网络提供商,您将不会获得相同的 IP 地址。使用 DNS,只需一个gethostbyname电话。
  • 并且不要忘记对服务器进行身份验证;即使使用硬编码的 IP,也很容易重定向它。
于 2013-03-11T10:47:53.760 回答