【问题标题】:need to get IP address for client server in Android, Is there a better way?需要在Android中获取客户端服务器的IP地址,有没有更好的方法?
【发布时间】:2013-01-31 00:31:09
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 一般来说,你问的是DNS

标签: android sockets networking client-server


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    如果Android服务器无法分配固定的公网IP地址,即使用DHCP获取局域网IP,它可以向DHCP服务器请求特定的IP地址(可能需要对路由器进行一些配置),即路由器在这里。

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

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

    【讨论】:

      【解决方案3】:

      连接后可以取回socket地址 使用新客户端

      ( Socket 客户端 = 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());
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-01
        • 2021-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多