从互联网连接到Android应用程序的套接字:可以吗?

Don*_*nic 10 android serversocket server

我正在尝试开发一个Android(服务器)应用程序,该应用程序将直接 从Internet 接受TCP连接。几年前,我没有任何尝试。这有可能吗?

那时,我在StackOverflow和其他地方以不同的方式提出了这个问题,但从未得到满意的答案。答案分为两类:

  • 不,您不能
    给出最权威的答案:大多数运营商不会将连接请求路由到移动设备。

  • 是的,您可以。
    这些答案没有提供帮助的详细信息或示例。

我尝试过的

  • 我可以通过各种方式成功获取移动设备的外部IP。但这只是难题的一部分。请参阅下面的注释1。

  • 我创建了一个侦听端口(例如2000)的ServerSocket。但是该应用程序不接受此套接字上来自Internet的连接。显然,此套接字正在设备的本地(内部)网络(即192.168.1.0)上侦听。

  • 我能够通过设备上的其他应用程序(位于同一子网中)进行连接。

  • 我还可以通过商店中的NAT路由器进行连接,该路由器将Internet地址转换为设备的本地网络。但这对现场(没有可用的路由器)没有帮助。请参阅下面的注释2。

  • 我曾尝试向AT&T客户支持型人员咨询,但我认为他们不理解我的问题。

笔记:

    1. 是的,设备的IP地址会随时间或位置而变化,但是我始终可以通过各种方式(例如whatmyip.com等)获得正确的当前 IP。但是,使用当前设备IP也不起作用。顺便说一句-我的公共IP 从未改变。因此,出于所有意图和目的,我的IP 静态的。在任何情况下,IP问题都是一马当先,我可以肯定这是路由问题,而不是IP地址问题。
    1. 我可以通过WiFi连接,因为我的Internet调制解调器/路由器在设备的本地子网(192.168.1。)上通过Wifi在背面提供了DHCP连接。我的设备的地址为192.168.1.65,因此我无需通过运营商即可连接到它。
    1. AT&T告诉我,我无法为移动设备购买静态IP(更新9/23/19)。

我当前的理论(9/23/19)

我目前的谦虚信念是,这里有一个类似NAT的实体在起作用。要么:

  • 公用IP实际上指向AT&T总部的NAT路由器。
  • 该设备具有内置的类似NAT的路由器

无论哪种情况,根据这种理论,入站 TCP连接都不会转发到设备的本地网络,但是出站连接可以正常通过。

摘要

也许答案仍然是一样的,但是我想我会再问一遍,以防万一情况发生了变化或如今人们有了更好的见解,

Don*_*nic 1

(2019 年 9 月 26 日更新)

我发布这个“答案”本身并不是一个答案,而是为了征求建设性的批评和/或肯定。我在下面所做的任何陈述绝对应该隐含地加上“我谦虚地相信......”前缀。

昨天,我有了一个个人的顿悟。我终于通过我厚厚的脑袋明白了一些回应者所说的话。下面我提出我的新认识。

迄今为止,我认为 AT&T 的移动数据网络只是通过蜂窝基站和干线实现的互联网的直接延伸。现在我意识到这是一个封闭的、私有的数据传输机制。由于它是 AT&T 所有,他们可以实施他们选择的任何协议,包括从他们的头端到我注册的手机的“私人”数据连接。这些连接类似于典型桌面 NAT 路由器上的 LAN 侧端口。头端(即它们的 NAT 路由器)是唯一可以从 Internet 访问的实体。

互联网和我的手机之间的头端连接是通过这些AT&T 专用连接进行的。我的设备(以及我相信附近的设备)报告的“公共 IP”实际上指向 AT&T 头端,在我的例子中是 150 英里外的迈阿密)。头端将出站连接从我的手机转发到互联网,但不转发入站连接请求。

关于我的“公共IP”

我认为这是不存在的,事实上,这是一个毫无意义的概念。如果您无法连接到这样的地址,那么它还有什么意义呢?

概括

我现在相信我最初问题的答案是“不可能,何塞”。这不是由于寻址问题,而是 AT&T 不会将传入连接路由到设备。他们也不通过其专用网络为设备提供静态 IP(鉴于上述情况,这无论如何都没有多大意义)。

如果本原始答案中的任何陈述不正确,请让我知道哪一项以及为什么不正确