【问题标题】:How to get the subnet mask of my android device which acts as a hotspot?如何获取充当热点的 android 设备的子网掩码?
【发布时间】:2012-11-25 09:48:29
【问题描述】:

我想从充当热点的 android 设备进行广播,但使用 255.255.255.255 在 android 中不能用作 UDP 广播。但是 192.168.1.255 这个广播地址有效。当我检查设备的 IP 地址时,它显示 192.168.1.4。

现在如何从这个地址计算出地址192.168.1.255?

【问题讨论】:

  • 是的,我尝试使用 dhcp,但它返回 null,因为它充当 dhcp 服务器
  • 我的意思是论坛,而不是 root 的应用程序
  • @323go,是的,伙计,你是对的
  • 您无法仅根据 IP 地址计算广播地址。您还必须知道网络掩码。

标签: android networking udp ip-address broadcast


【解决方案1】:

好吧,如果你已经完成了广播,只需将地址的最后一个字节更改为 255,你可以执行以下操作:

String getBroadcastAddress( final String address ) throws UnknownHostException {
    InetAddress addr = InetAddress.getByName( address );
    if( InetAddress instanceof Inet4Address ) {
        byte[] bytes = addr.getAddress();
        bytes[3] = 255;
        return InetAddress.getByAddress( bytes ).getHostAddress();
     } else {
         ... deal with ipv6
     }
}

直接从 NetworkInterface 拉取广播地址,结果如下:

public static String getBroadcast() throws SocketException {
    System.setProperty("java.net.preferIPv4Stack", "true");
    for( Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces(); interfaces.hasMoreElements(); ) {
        NetworkInterface nif = interfaces.nextElement();
        if( !nif.isLoopback() ) {
            for( InterfaceAddress addr : nif.getInterfaceAddresses() ) {
                return addr.getBroadcast().toString().substring(1);
            }
        }
    }
    return null;
}

您可能需要筛选 NetworkInterface 才能找到与内部 ip 对应的接口。

【讨论】:

  • 但没有必要只改变最后一个字节。我正在为所有安卓手机开发通用应用程序。所以我们不能说只有最后一个字节有用。无论如何谢谢帮助我
  • 您不能假设设备位于 C 类子网上!它实际上与设备无关。这个答案不正确。
  • 问题标题: “如何获取我的android设备作为热点的子网掩码?” 从第一个开始句子: “我想从 android 设备广播” 意图很明确,尽管问题的最后一句中出现了错误。你的回答不够。
  • @Brad,你赢得了互联网。与此同时,我将答案扩展为普遍适用。
猜你喜欢
  • 2011-10-31
  • 1970-01-01
  • 2014-08-24
  • 2019-06-13
  • 1970-01-01
  • 1970-01-01
  • 2012-12-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多