Android服务器概念混乱。如何在不同的网络上连接TCP聊天应用程序

时间:2015-07-29 18:40:17

标签: android sockets networking tcp

我按照聊天应用程序教程使用TCP套接字连接设备。

为简单起见,我将应用程序拆分为2,因此一个是服务器而另一个是客户端。

当我使用相同的wifi网络时,该应用程序工作正常,但当我的一个设备跳转到不同的网络时它不会。

这是我对概念感到困惑的地方。

因为它们是不同的网络,所以我不能像以前一样使用本地IP。我确实发现使用公共IP是可能的,但我仍然不熟悉编码,所以我不确定这是否是正确的方法。我应该看看VPS吗?还是GCM?

我是否需要重写我的应用程序,以便我有2个客户端(彼此交谈)并且他们通过静态IP(如中间人)通过服务器?但后来我感到困惑,因为在这种情况下,客户端会首先启动,然后与服务器通信。但我一直以为Server是先启动并等待接受套接字?

不确定这是否是提出这些问题的正确位置,我对这些概念感到非常困惑。谢谢!

1 个答案:

答案 0 :(得分:1)

对于应用程序中的套接字编程,您需要的唯一信息是IP地址和端口号。切换到另一个网络后,对源代码的唯一修改就是IP地址。

当设备不在同一局域网中时,理论上需要路由器相互定位。如果您不拥有对路由器的控制权,那么使用公共IP和静态IP是正确的解决方案。充当服务器的应用程序应具有此静态IP,并且应始终处于活动状态,并侦听连接。作为客户端的应用程序稍后启动,并使用其IP地址和您定义的端口号连接到服务器。

通常,当您访问Internet时,您会从ISP获得公共IP,并且在大多数情况下,如果您保持在线,它将保持静态。因此,只需找出服务器上的IP地址,然后从客户端应用程序连接到此IP地址。如果从无线路由器获得Internet访问,则应在路由器上设置端口转发,并在客户端使用此路由器的IP地址。