android - 如何连接到没有公网IP的电脑?

标签 android delphi networking

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

无需具体说明平台,我使用 winsock 或 Indy 熟悉 Delphi 中的网络,并且我确信我能够在 Android 中找出合适的机制。

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

我有一个可用的网络应用程序,但它只能在 LAN 中运行,所以我猜想需要另一种方法。

感谢解答

最佳答案

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

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

您可能想阅读 specification for Copilot (最初名为 Aardvark 项目)。 Joel Spolsky 在项目开始时发布了规范。它谈到了他们对反射器服务的使用。

The Reflector
A Windows Service which we run on our servers, used to allow any helper to help any victim even when both of them are behind firewalls. Both helper and victim connect to the reflector. The reflector checks that they are authorized and relays messages between helper and victim until the paid-up time runs out

关于android - 如何连接到没有公网IP的电脑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12059270/

相关文章:

android - 如何在 Android Ant 构建系统中修改 javac 的 -encoding 参数

java - 更改 GridView 中单元格的大小?

java - 如何在 Android 中隐藏/显示表单?

c++ - 使用 GetNetworkParams() 检索网络信息时出错

java从网络设备读取文件

android - 将一组按钮添加到 Android 应用程序中的 GridView

delphi - [dcc32 fatal error ] : F2084 Internal Error: NC1921

Delphi 从 TObjectDictionary 中提取键

delphi - 我可以在控制台 Delphi 应用程序中使用 DataModule 吗?

c++ - fork 进程和客户端之间断开连接