【问题标题】:Server on Android reachable from devices not on local network?可以从不在本地网络上的设备访问 Android 上的服务器?
【发布时间】:2016-01-14 06:26:57
【问题描述】:

我一直在尝试设置一个允许在两个设备(服务器和客户端)之间进行通信的应用程序。我已经建立了连接,只要它们连接到同一个互联网源,就可以在两者之间发送消息。当我将设备连接到两个不同的来源时,我无法在两者之间建立连接。它通过输入您要连接的服务器的 IP 地址来工作。

例如,如果我的服务器设备连接到我的家庭 Wi-Fi,而我的客户端设备连接到同一个 Wi-Fi 路由器,则通信正常。但是,当我将服务器连接到 Wi-Fi 并将我的客户端连接到蜂窝数据(或不同的 Wi-Fi 路由器)时,客户端无法找到服务器。

从我所做的所有搜索中,我发现这是因为我的服务器绑定到我的本地主机。所以我的问题是,无论您连接到什么网络,我怎样才能让我的服务器可以从任何地方访问?

我使用本教程让我的服务器运行:

http://android-er.blogspot.com/2014/02/android-sercerclient-example-server.html

第一个评论是一个问题,询问为什么它只能在本地网络上运行,有人回答说您必须在路由器上设置端口转发。据我了解,这仅在服务器设备始终连接到同一路由器时才有效。我的应用程序不会出现这种情况。随着设备更改网络,服务器将拥有一个新的 IP 地址。无论服务器连接到哪个网络,我都希望始终可以访问此 IP 地址。

【问题讨论】:

  • 谁能告诉我是否有可能让服务器在运行应用程序的每部手机上独立运行,但仍然可以在全球范围内访问?

标签: android sockets networking server portforwarding


【解决方案1】:

您需要创建一个中继服务器。这将使用 PC 上的 java 应用程序进行设置,它将管理虚拟“房间”,然后将消息中继到客户端。您运行中继服务器的计算机需要端口转发,但客户端不需要。该教程中的大部分代码都可以应用于这个概念。

见:How to create a java Server that accepts client connections and then build a relay connection for a client pair

【讨论】:

  • 非常感谢您提供的信息。这似乎是一个解决方案。我只是想知道,是否有可能让手机上运行的每台服务器都可以使用它?
  • 我可能是错的,但我有大约 99% 的把握不能那样做。提供商的 4G 无线服务无法让您转发端口,用户必须为连接到的每个 LAN 设置端口转发。
【解决方案2】:

如果您的服务器位于防火墙后面,除非该端口在防火墙上打开,否则您将无法访问它。避免这种情况的唯一方法是使用非防火墙服务器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-24
    • 2012-01-03
    • 2020-08-09
    • 2023-03-17
    • 2019-11-04
    • 1970-01-01
    相关资源
    最近更新 更多