我在这方面很难找到帮助资源。我知道如何使用tcpclient类在一个IP/端口/计算机和另一个IP/端口/计算机之间创建连接。
我的疑问是,当一台机器想要启动到另一台机器的TCP连接时,如果目标机器在另一个网络中,该如何工作。因此,目标网络可能有数百台计算机,每台计算机都有自己的专用IP,并且网络将有一个公共IP地址。这将使用tcpclient类或其他更合适的类。
我知道我们可以使用端口,然后在网络内部端口可以转发到正确的机器,但我正在寻找一个解决方案,如一个服务,如Logmein使用。基本上,我想始终使用端口80,然后在需要时启动从服务器到特定计算机或同一网络上其他计算机的连接。
我想,理论上,我可以先从网络内部创建连接,然后在服务器上保存详细信息并关闭连接,然后在不久的将来,当我需要时,我会重新打开连接。
所以在我的场景中,我将有多个跨多个网络的客户机,每个网络可能有多个安装了客户机的内部机器。然后在服务器上,我将在需要时启动与这些机器的连接。在每个网络中,出于明显的原因,我希望使用端口80。我想从服务器而不是客户机启动连接的原因仅仅是为了节省资源,我无法处理已打开的连接,直到最终可能需要与它们通信。
此外,除了安装了我的客户机之外,我无法控制客户机网络。
理想情况下,我希望有C信息,可能是代码,而不是网络配置。

最佳答案

我以前在一家公司有这个要求。我们将客户机/服务器软件(基于C)安装在多个不同的网络上,混合使用公共/私有IP。我找到了两种相对简单的方法来解决它。首先,我想说,没有一个公共IP,就我的经验而言,不可能可靠地连接。
当我提出解决方案时,我用这种方式向其他开发人员/经理解释了这个问题。
您的服务器,即具有公共IP地址[对客户端公开,但可能仍然是“内部地址”]的计算机,就像一个没有任何长途呼叫的房子。它可以接电话,但不能打任何电话。客户就像是提供长途服务的房子。客户机必须调用服务器,因为它们有很长的距离。一旦接通,任何一方都可以在网上通话。
从这里你有两个选择。
客户端连接而不是断开连接(这是我实现的)。在服务器上,我有一个将客户机对象映射到客户机连接的对象,这样我就可以随时与连接的客户机通信。
服务器为客户机保存一个消息队列。客户机以固定的时间间隔自动连接,以查看是否有任何消息(可能5分钟)。服务器可以选择在特定的时间间隔内保持连接。另一个供应商称之为“快速对话”。

08-04 15:25