如何在Android中使用BroadcastAddress获取计算机的IP地址
在我的应用程序中,我希望使用广播地址获取局域网中计算机的所有IP地址。我使用以下代码来确定广播地址如何在Android中使用BroadcastAddress获取计算机的IP地址,android,broadcast,Android,Broadcast,在我的应用程序中,我希望使用广播地址获取局域网中计算机的所有IP地址。我使用以下代码来确定广播地址 InetAddress getBroadcastAddress() { try { WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); DhcpInfo dhcp = wifi.getDhcpInfo(); // handle null someho
InetAddress getBroadcastAddress()
{
try
{
WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
DhcpInfo dhcp = wifi.getDhcpInfo();
// handle null somehow
int broadcast = (dhcp.ipAddress & dhcp.netmask) | ~dhcp.netmask;
byte[] quads = new byte[4];
for (int k = 0; k < 4; k++)
quads[k] = (byte) ((broadcast >> k * 8) & 0xFF);
return InetAddress.getByAddress(quads);
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
}
有可能吗
编辑:
如果我是诚实的,它的工作原理是:我的手机发送一个UDP数据包,我的手机接收传入的数据包。由于唯一的包裹来自我的手机,很明显,这个地址就是我手机的地址。但是,如果广播地址有效,则每个网络接口都应将信号发回。我说得对吗?你说得部分正确 当您向广播地址发送UDP数据包时,网络上的所有计算机都将接收该数据包,除非网络上的路由器限制将UDP数据包发送到广播地址。在企业网络中,这是最常见的情况 但并不是所有的计算机都会回复这个数据包,它们需要知道如何处理它
- 您可以编写一个服务器应用程序,该应用程序理解您的UDP数据包,并配置为回复该数据包,然后将该服务器应用程序部署到网络上的所有计算机
- 或者实现现有的发现协议,如Bonjour(Mac)或SSDP(Windows)
我希望这个解释能帮助你解决你的问题。是的,确实如此。我已经开始实现第一种方式(UDP服务器应用程序)。@Nestor我需要这样的东西。你能分享一些关于它的信息吗?@learner你可以在最初的帖子中看到Android客户端。我创建了一个.Net UDP侦听器服务(UDP服务器应用程序),当它接收到UDP数据包时,会向客户端发送一个响应数据包。服务器应用程序如下所示:
int PORT = 8080;
int DISCOVERY_PORT = 8080;
try
{
DatagramSocket socket = new DatagramSocket(PORT);
socket.setBroadcast(true);
String data="TEST";
DatagramPacket packet = new DatagramPacket(data.getBytes(), data.length(),
getBroadcastAddress(), DISCOVERY_PORT);
socket.send(packet);
byte[] buf = new byte[1024];
DatagramPacket packet2 = new DatagramPacket(buf, buf.length);
Log.w(Tags.DEBUG,"Receive start");
socket.receive(packet2);
Log.w(Tags.DEBUG,packet2.getAddress().toString());
}
catch (Exception e)
{
e.printStackTrace();
}