获取Android网络接口IP地址

获取Android网络接口IP地址,android,linux,wifi-direct,Android,Linux,Wifi Direct,我正在为Android编写一个wifi direct应用程序。我正在尝试与设备建立套接字连接。由于group owner intent函数似乎不起作用(它只是随机分配),因此我必须找到一种方法将客户端IP地址传输到主机。我知道的唯一地址是WifiP2pManager可以获取的group info对象中的主机设备。我知道哪个设备是主机,哪个设备是客户端,因此我可以打开一个套接字,以便连接到达或尝试连接到另一个设备 如果“主机”设备是组所有者,我需要做的是找到一种方法来传输Wifi P2P(Wifi

我正在为Android编写一个wifi direct应用程序。我正在尝试与设备建立套接字连接。由于group owner intent函数似乎不起作用(它只是随机分配),因此我必须找到一种方法将客户端IP地址传输到主机。我知道的唯一地址是WifiP2pManager可以获取的group info对象中的主机设备。我知道哪个设备是主机,哪个设备是客户端,因此我可以打开一个套接字,以便连接到达或尝试连接到另一个设备

如果“主机”设备是组所有者,我需要做的是找到一种方法来传输Wifi P2P(Wifi Direct)客户端的设备IP地址。如果主机是组所有者,则无法连接到客户端上的套接字。这有点令人困惑,但这就是它的工作原理

我见过从ARP表中获取IP地址之类的事情,但ARP表似乎在几秒钟(比如一分钟)后就会自动清除,而且在ICS上,由于wifi接口被禁用,无法直接使用wifi,所以我甚至在ARP表中看不到任何内容

我觉得这应该很容易,但我不是一个linux大用户,所以我不知道什么文件可以保存网络接口配置。有没有办法获取网络接口的IP地址?或者至少是Wifi P2P接口?(注意:这不是wifi地址。它与栓系地址类似,只是它是wifi Direct。WifiManager不返回此地址)

谢谢,
Mgamerz

上面的代码应该可以帮助您获得ipaddress


要获取通过套接字连接到主机的客户端的ip地址,可以使用。。clientSocket=this.serverSocket.accept();
clientSocket.getInetAddress()

我发现我可以执行netcfg来做一些工作。这真的很难看,但我想它会起作用的。。。很多regexing。。。做这么简单的事情似乎太复杂了。试着读一下这个答案:我现在正在看这个答案。因为我不知道接口名是什么(它似乎有所不同),所以我可以尝试使用正则表达式。不幸的是,这在ICS上不起作用,因为接口似乎取决于某些方法,而取决于其他方法,它取决于此。我还没有完全让我的工作,但一旦我做了,我会将其作为一个答案发布,以便人们可以找到它。仍在工作。继续先做我的应用程序的其他部分,这样我才能找到最重要的部分。这不会给你任何IP地址,只会给你我特别声明我不寻找的wifi地址。要获取通过套接字连接到主机的客户端的IP地址,你可以使用。。clientSocket=this.serverSocket.accept();clientSocket.getInetAddress();我需要IP地址的全部原因是为了创建套接字连接。如果我不知道地址,我将无法尝试连接。我无法获取您要查找的ip地址。。。我已经为你提供了获取你和客户ip地址的方法…几次误读了你的帖子,现在我明白你的意思了。。。有点使用socket.getInetAddress()。很抱歉。如果你编辑你的答案,我将恢复投票。
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);
    }