2

我有一个 TCP 客户端程序,它需要与设备中嵌入的服务器进行通信。可能有 1000 台设备需要通过单个客户端程序进行控制。由于这些设备(即tcp服务器)的数量很大,所以它们必须在不同的路由器后面

所以场景就像

客户端-----“路由器1”----服务器1,服务器2,服务器3...server_255

   ----- "router2" ---server1, server 2...server_255

在此处输入图像描述

由于客户端和服务器程序位于不同的网络中,那么在客户端和服务器之间建立通信最简单的方法是什么?

虽然看起来很简单的客户端-服务器编程,但问题在于 NAT ,这里的网络转换。服务器位于不同的专用网络后面,所以我期待在这里解决 NAT 问题。(例如端口转发,但不确定)

注意:我的客户端和设备仍在我的网络中,因此安全性不是主要问题。

提前谢谢了。

4

3 回答 3

3

最直接的设计是有一个专用的守护进程,通常称为控制器,监听一个众所周知的端口,所有设备都充当客户端,连接到它。控制器将观察设备上下移动,跟踪它们的位置和状态。

您现在称为“客户端”的东西将成为用户界面的一部分。它将查询控制器并显示结果,并向控制器发出命令,然后控制器将它们中继到设备。

于 2013-01-15T17:57:55.817 回答
2

让您的所有“服务器”(即设备)保持与您的“客户端”(即中央服务器)的连接。正如您所描述的那样,采用另一种方式将无法与路由器一起使用。

如果不需要全时连接,那么您可能需要建立连接计划或使用广播/多播消息告诉客户端进行连接。请注意,广播/多播将需要更改路由器配置以确保消息发出。

我在这里假设路由器是指其中包含 NAT 的东西。NAT 是这里的问题。

于 2013-01-15T17:12:04.360 回答
2

您的插图显示了每个基于 NAT 的路由器后面的多个端点。如果您使用端口转发方法,则需要为各种路由器中的每个端点注册不同的端口号。跟踪和配置会很痛苦,但会允许您的中央管理服务器即时访问您的每个端点。

如果您控制端点上的软件,您可以让它们轮询中央服务器以获取指令。路由器中不需要配置,因为请求来自私有端。假设来自服务器的典型消息类似于“OK”,那么流量将是微不足道的。不利的一面是中央服务器的指令传递不会是即时的。客户端直到下一个轮询间隔才知道消息可用。

介于这两个极端之间但要付出额外成本的是分布式管理方法。如果您在每个 NAT 路由器后面已经有一个服务器,您可以让它将指令中继到每个端点。您的中央管理服务器可以控制少数本地管理服务器,每个管理服务器位于每个 NAT 防火墙后面,并且这些服务器中的每一个都可以直接访问其同一 LAN 中的端点。

于 2013-01-24T01:01:27.493 回答