4

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

不需要具体说明平台,我熟悉 Delphi 中使用 winsock 或 Indy 的网络,我相信我将能够在 Android 中找出适当的机制。

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

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

感谢您的回答

4

2 回答 2

4

您可以放置​​一个中间服务器,它们都可以路由“nat traversal”。

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

于 2012-08-21T16:36:02.810 回答
4

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

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

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

Reflector
我们在服务器上运行的 Windows 服务,用于允许任何帮助者帮助任何受害者,即使他们都在防火墙后面。帮助者和受害者都连接到反射器。反射器检查他们是否被授权并在帮助者和受害者之间中继消息,直到付费时间用完

于 2012-08-21T17:10:42.507 回答