27288
UDPのブロードキャスト送信を行うアプリケーションを作りたくて、送信先として端末が所属しているネットワークのブロードキャストアドレスを指定しようと思っています。  
例えば端末が`192.168.10.34`というアドレスを持っていてサブネットマスクが`255.255.255.0`であるとき、ブロードキャストアドレスとして`192.168.10.255`を指定すれば良いことはわかっているのですが、どうすればAndroidのJava
APIを使って端末が所属しているネットワークのサブネットマスクが取得できるのかがわかりません。  
何か良い方法はありますか？
CC BY-SA 3.0
2016-07-01T04:17:04.280
27238
2016-07-03T04:26:01.417
450
question
android java
Androidでサブネットマスクを取得するには
サブネットマスクは[`InterfaceAddress#getNetworkPrefixLength()`](https://developer.android.com/reference/java/net/InterfaceAddress.html#getNetworkPrefixLength\(\))メソッドで取得できます。

```

    try {
        Enumeration<NetworkInterface> networkInterfaceEnumeration =  NetworkInterface.getNetworkInterfaces();
        while(networkInterfaceEnumeration.hasMoreElements()) {
            NetworkInterface networkInterface = networkInterfaceEnumeration.nextElement();
            for (InterfaceAddress interfaceAddress : networkInterface.getInterfaceAddresses()) {
                Log.i("debug", "ipAddress  : " + interfaceAddress.getAddress());
                Log.i("debug", "broadcast  : " + interfaceAddress.getBroadcast());
                Log.i("debug", "subnetMask : " + interfaceAddress.getNetworkPrefixLength());
            }
        }
    } catch (SocketException e) {
        e.printStackTrace();
    }
    
```

例えばこのような結果が返ってきます。

> I/debug: ipAddress : /192.168.1.2  
>  I/debug: broadcast : /192.168.1.255  
>  I/debug: subnetMask : 24

結果が`short`で返ってきます。`24`という値はリファレンスを参照すると、IPv4の`255.255.255.0`であることが分かります。

`getBroadcast()`でブロードキャストアドレスも取れるので、直接こちらを指定した方が楽だと思います。
CC BY-SA 3.0
2016-07-03T04:26:01.417
27288
2016-07-03T04:26:01.417
5337
27238
answer