gpt4 book ai didi

android - 如何在 Android 中使用 BroadcastAddress 获取计算机的 IP 地址

转载 作者:行者123 更新时间:2023-11-29 21:20:06 26 4
gpt4 key购买 nike

在我的应用程序中,我想使用广播地址获取 LAN 中计算机使用的所有 IP 地址。我使用以下代码来确定广播地址。

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;
}

现在我知道了,据我所知,当一个人使用广播地址时,每台计算机都会回答它,所以如果我简单地向那个地址发送一个“ping”消息,局域网的计算机就会回答它。我应该如何在 Android 中对它们执行 ping 操作?什么命令会将获取的地址发送给我?

以下代码只是从发送电话返回数据包,但我需要计算机的地址:

 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();
}

有可能吗?

编辑:

老实说,它按照写的那样工作:我的手机发送一个 UDP 数据包,我的手机接收传入的数据包。由于唯一的包裹来 self 的手机,很明显地址是我手机的地址。但是,如果广播地址有效,则每个网络接口(interface)都应发回信号。我说得对吗?

最佳答案

你部分正确。

当您将 UDP 数据包发送到广播地址时,网络上的所有计算机都会收到该数据包,除非网络上的路由器限制将 UDP 数据包发送到广播地址。这主要是在公司网络上的情况。

但并非所有计算机都会回复该数据包,它们需要知道如何处理它。

  • 您可以编写一个服务器应用程序来理解您的 UDP 数据包并配置为回复该数据包并将该服务器应用程序部署到网络上的所有计算机。
  • 或者您实现现有的发现协议(protocol),例如 Bonjour (Mac) 或 SSDP (Windows)

如果您想使用现有协议(protocol)而不是部署您自己的应用程序,我建议您看看 ZeroConf 服务发现。 http://en.wikipedia.org/wiki/Zero-configuration_networking#Service_discovery

我希望这个解释能帮助您解决问题。

关于android - 如何在 Android 中使用 BroadcastAddress 获取计算机的 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20837290/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com