【发布时间】:2013-01-23 08:08:09
【问题描述】:
我的 Android 设备上托管了一个 HTTP 服务器。我希望它能够从互联网访问它,即使它连接到家庭 wifi(在无线路由器后面)。
此外,在路由器上配置静态端口转发不是一个选项,因为从互联网上,我将无法访问路由器配置。
我有什么选择吗?
我试过这个:
Android 应用程序从特定端口号(例如 8080)的 android 设备(本地 IP 地址,例如 192.168.0.1)通过家庭 WIFI 向互联网上的 Web 服务器发送 HTTP 请求,
路由器会将源地址修改为其公共 IP 地址的地址(例如 111.100.45.65),并将源端口号修改为任意随机端口号(例如 39824),并在其动态 NAT 表中创建一个条目。
内部 IP 内部端口 外部端口 192.168.0.1 8080 39824
据我了解,此条目至少会保留几个小时。 Internet 上的 Web 服务器将报告源 IP 和端口分别为 111.100.45.65 和 39824。
从安卓应用程序向互联网上的 Web 服务器发送 HTTP 请求后,我在设备的 8080 端口上运行了一个 HTTP 服务器。现在,如果我要从 Internet 向 39824 端口的地址 111.100.45.65 发送 HTTP 请求,它应该被设备上运行的 HTTP 服务器接收(路由器将从其动态 NAT 表中解析请求并将其定向到我的设备) .
但由于某种原因,此请求没有得到解决。任何指针。
【问题讨论】:
-
您真的想为此使用 VPN。
-
VPN 也不是一个选项。我正在尝试实现 tcp 打孔。我正在从 android 上的特定端口(路由器后面)连接到公共服务器。此外,我正在我的应用程序中同一端口的另一个线程中监听。由于公共服务器现在知道路由器 ip 和端口,线程不应该能够在公共服务器上接收来自客户端的 HTTP 请求吗?
标签: android sockets networking tcp