Android上的服务器可以从不在本地网络上的设备访问?

时间:2015-10-15 17:13:39

标签: android sockets networking server portforwarding

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

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

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

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

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

第一个评论是一个问题,询问为什么它只适用于本地网络,有人回答说你必须在路由器上设置端口转发。据我所知,这只有在服务器设备始终连接到同一路由器时才有效。这不适用于我的应用。当设备更改网络时,服务器将具有新的IP地址。无论服务器连接到什么网络,我都希望这个IP地址始终可以访问。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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