需要获取Android中客户端服务器的IP地址,有更好的方法吗?

时间:2013-01-31 00:31:10

标签: android sockets networking client-server

我使用套接字通过wifi使用相同的路由器将两个Android平板电脑连接为网络。一个是服务器,另一个是客户端。

问题是,每次我想连接客户端和服务器平板电脑时,我都必须在客户端平板电脑中输入服务器平板电脑的IP地址。有没有办法避免这种情况?

我还没弄清楚如何在联网之前将服务器IP地址发送到客户端平板电脑。

我希望有一种方法可以将这两款平板电脑联网,而无需知道服务器平板电脑的IP地址。

一个想法是让服务器平板电脑连接到用PHP编写的网站,并让网站获取IP地址并将其存储在数据库中。接下来我会让客户端平板电脑从该网站获取IP地址。然后具有服务器IP的客户端平板电脑将能够进行连接。所有这些都将避免用户必须知道IP并在每次想要连接时输入IP。

我确信其他人之前已经做过类似的事情并解决了这个问题。有什么想法吗?

3 个答案:

答案 0 :(得分:0)

如果服务器Android无法分配固定的公共IP地址,这意味着它使用DHCP获取LAN IP,它可以从DHCP服务器请求特定的IP地址(也许您需要为路由器配置一些),这是路由器在这里。

另一种方法是使用反向地址解析协议(RARP),您可以使用该协议向交换机询问具有特定MAC地址的主机的IP地址。 MAC地址已修复为您的服务器Android手机。

这些只是理论上可行的。您需要查看要在Android手机中调用的API。

答案 1 :(得分:0)

我有这种Android应用程序。我所做的是使用多播网络。查看示例here

由于多播网络使用组IP,这是我建议的想法

  • 服务器平板电脑将充当接收器
  • 客户端将是发件人(他们将本地IP发送给接收方)

答案 2 :(得分:0)

连接后,您可以检索套接字地址 使用新客户端

(套接字客户端= server.accept();)

来自

        client.getLocalAddress().toString()                //ip server
        client.getRemoteSocketAddress().toString()         //ip client

并将它们存储在HashMap列表中,例如:

        String name=client.toString();
        name=name.substring(name.indexOf("/")+1,name.indexOf(","));
        List<String> index = new ArrayList<String>(list.keySet());
        if(index.indexOf(name)<0)
        list.put(name,client.getRemoteSocketAddress().toString());