如何在没有公共IP的情况下连接到计算机?

时间:2012-08-21 16:30:53

标签: android delphi networking

我脑子里有一个简单的app想法,我需要知道如何从Android应用程序(客户端)连接到Windows应用程序(Delphi,服务器)。

没有必要具体说明平台,我熟悉使用winsock或Indy的Delphi中的网络,我相信我能够在Android中找到合适的机制。

我需要知道是如何连接到服务器(计算机),它没有自己的公共IP 不在同一网络中客户端(一个可以在本地路由器后面,而另一个可能通过3G连接到互联网)。这应该是可能的,因为许多程序都是这样的(远程桌面程序,TeamViewer,例如:一台计算机被分配了一个ID并使用此ID,其他计算机可以连接到它。)我将无法访问后面的路由器应用程序将运行,因此端口转发不是一种选择。

我有一个有效的网络应用程序,但这只适用于局域网,所以我猜测需要另外一种方法。

感谢您的回答

2 个答案:

答案 0 :(得分:4)

你可以放一个中间服务器,他们都可以路由“nat遍历”。

否则您必须在其中一台计算机的本地路由器上放置端口转发,以允许将传入连接转发到计算机。

答案 1 :(得分:4)

许多以这种方式工作的程序仍然使用具有公共IP的服务器。客户端的每一侧连接到服务器,说“我在这里”。然后,公共服务器可以在两个客户端之间混洗数据。

对于公共服务器和每个客户端之间的通信仍然存在很多问题 - 即拉取与推送以获取发送到服务器的数据并将其返回到第二个客户端。

您可能需要阅读specification for Copilot(最初名为Project Aardvark)。 Joel Spolsky在启动项目时发布了规范。它谈到了他们使用反射器服务。

  

反射器
  我们在服务器上运行的Windows服务,用于   允许任何帮助者帮助任何受害者,即使他们两个都落后   防火墙。助手和受害者都连接到反射器。该   反射器检查它们是否被授权并在它们之间传递消息   帮助和受害者,直到付清时间耗尽