获取Android网络接口IP地址

5
我正在为Android编写一款WiFi-Direct应用程序。我试图与设备建立套接字连接。由于组所有者意向功能似乎无法工作(它只是随机分配),所以我必须找到一种方法将客户端的IP地址传输到主机。我知道的唯一地址是主机设备,它包含在WifiP2pManager可以获取的组信息对象中。我知道哪个设备是主机,哪个设备是客户端,因此我可以打开一个套接字等待连接到达或尝试连接另一个设备。
我的问题在于,如果'主机'设备是组所有者,则需要找到一种方法传输Wifi P2P(Wifi Direct)客户端的设备IP地址。如果主机是组所有者,则无法连接到客户端上的套接字。这有点令人困惑,但这就是它的工作原理。
我看到了一些从ARP表中获取IP地址的方法,但ARP表似乎只在几秒钟后清除自身(大约一分钟),而且在ICS上,由于WiFi接口已被禁用用于WiFi Direct,我甚至看不到arp表中的任何内容。
我觉得这应该很容易,但我不是一个熟练的Linux用户,所以我不知道哪个文件会保存网络接口配置。是否有一种方法可以获取网络接口的IP地址?或至少是WiFi P2P接口?(注意:这不是WiFi地址。 它类似于热点共享地址,但它是Wifi Direct. WifiManager不返回此)
谢谢, Mgamerz

1
我发现可以执行netcfg来完成一些工作。虽然很丑陋,但我想它会起作用...需要大量的正则表达式...这似乎过于复杂了,只是为了做一件简单的事情。 - Mgamerz
2
请尝试阅读此答案:https://dev59.com/l2025IYBdhLWcg3wVkif#13007325 - thepoosh
我现在正在查看那个答案。但是,由于我不知道接口名称是什么(它似乎有所不同),我可能可以尝试使用正则表达式。不幸的是,在ICS上这并不起作用,因为该接口对某些方法处于关闭状态,而对其他方法处于开启状态,并且在此情况下处于关闭状态。 - Mgamerz
我还没有完全弄好我的,但一旦我搞定了,我会把它作为答案发布,这样大家就能找到。 - Mgamerz
还在努力中。不断地需要先完成应用程序的其他部分,以便能够进入重要的部分。 - Mgamerz
1个回答

1
DhcpInfo dhcpInfo = (WifiManager)this.context.getSystemService(Context.WIFI_SERVICE)).getDhcpInfo();
String ipaddress = intToIp(dhcpInfo.ipAddress)

intToIp(int integer) {
        return (integer & 0xFF) + "." + ((integer >> 8) & 0xFF) + "."
                + ((integer >> 16) & 0xFF) + "." + ((integer >> 24) & 0xFF);
    }

上面的代码应该能帮助您获取连接到主机的客户端的IP地址...
要获取通过套接字连接到主机的客户端的IP地址,您可以使用clientSocket = this.serverSocket.accept(); clientSocket.getInetAddress();

这并不会给你任何IP地址,只会得到WiFi地址,而我明确表示我不需要WiFi地址。 - Mgamerz
要通过套接字获取连接到主机的客户端的IP地址,您可以使用以下代码:clientSocket = this.serverSocket.accept(); clientSocket.getInetAddress(); - neeraj
我无法理解您要查找哪个IP地址... 我已经为您提供了获取您和客户端IP地址的方法... - neeraj
我误读了你的帖子几次,现在我有点明白你的意思了。使用socket.getInetAddress()。对此我感到抱歉。如果您编辑您的答案,我会恢复我的赞成票。 - Mgamerz
谢谢。当我修复我的netcfg正则表达式后,我仍会发布我的答案。 - Mgamerz
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接