gpt4 book ai didi

c# - 启动从公共(public) IP 到另一个网络上的私有(private)机器的 tcp 连接

转载 作者:可可西里 更新时间:2023-11-01 02:32:44 26 4
gpt4 key购买 nike

我很难找到这方面的帮助资源。我知道如何使用 TCPClient 类在一个 IP/端口/机器与另一个之间创建连接。

我的疑问是,当一台机器想要启动到目标机器位于不同网络内的另一台机器的 TCP 连接时,它是如何工作的。因此目标网络可能有数百台计算机,每台计算机都有自己的私有(private) IP,而网络将有一个公共(public) IP 地址。这将使用 TCPClient 类或任何其他更合适的类。

我知道我们可以使用端口,然后在网络内部可以将端口转发到正确的机器,但我一直在寻找一种解决方案,例如 LogMeIn 使用的一种服务。基本上我想始终使用端口 80,然后在需要时启动从服务器到该特定机器或同一网络上其他机器的连接。

我想,从理论上讲,我可以先从该网络内部创建连接,然后在服务器上保存详细信息并关闭连接,然后在不久的将来,当我需要时,我会重新打开连接。

所以在我的场景中,我会有很多客户端跨多个网络,每个网络可能有多个安装了客户端的内部机器。然后在服务器上,我会在需要时启动与这些机器的连接。在每个网络中,出于显而易见的原因,我想使用端口 80。我想从服务器而不是客户端机器启动连接的原因仅仅是为了节省资源,我无法处理打开的连接,直到最终我可能需要与它们通信。

此外,除了安装了我的客户端之外,我无法控制客户端网络。

理想情况下,我希望有 C# 信息,可能是代码而不是网络配置。

最佳答案

我在以前的公司有这个要求。我们在混合了公共(public)/私有(private) IP 的众多不同网络上安装了我们的客户端/服务器软件(基于 C#)。我找到了两种比较简单的方法来解决。首先,我想说,如果没有公共(public) IP,就不可能可靠地连接(以我的经验)。

当我提出解决方案时,我是这样向其他开发人员/管理人员解释问题的。

你的服务器,那台有公共(public)IP地址的机器[对客户是公共(public)的,但可能仍然是一个“内部地址”],就像一个没有任何长途电话的房子。它可以接听电话,但不能调用任何电话。客户就像提供长途服务的房子。客户端必须调用服务器,因为它们距离很远。连接后,任何一方都可以在线通话。

从这里您有两个选择。

  1. 客户端连接且永不断开(这是我实现的)。在服务器上,我有一个将客户端对象映射到客户端连接的对象,因此我可以随时与连接的客户端进行通信。

  2. 服务器为客户端保存消息队列。客户端以固定的时间间隔自动连接以查看是否有任何消息(可能是 5 分钟)。服务器可以选择在特定时间间隔内保持连接。另一家供应商称此为“快速谈话”。

关于c# - 启动从公共(public) IP 到另一个网络上的私有(private)机器的 tcp 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21971000/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com