0

接続をリッスンするサービスがあり、特定のネットワークでのみリッスンするようにします。次のようにデバイスの IP アドレスを取得できます。

    private void printNetworkInterfaces()
    {
        try
        {
            Enumeration<NetworkInterface> nis = NetworkInterface.getNetworkInterfaces();
            for (NetworkInterface ni : Collections.list(nis))
            {
                Enumeration<InetAddress> iis = ni.getInetAddresses();

                for (InetAddress ia : Collections.list(iis))
                {
                    // We only want IPv4 addresses
                    if (!isIPv4(ia.getHostAddress()))
                        continue;
                    // Do tomething with ia.getHostAddress();


                }
            }    
        }
        catch (SocketException e)
        {
            Log.w(TAG,e);
        }
    }

ただし、デバイスの IP の代わりに、ネットワークの IP がそのネットワークでリッスンするようにします。たとえば、IP が 192.168.1.1 の場合、ネットワーク IP は 192.168.1.0 である必要があります。

4 番目の値を直接 0 に置き換えることもできますが、これは他のネットワークでは失敗します。

InetAddress.getHostAddress(); によって返される IP アドレスに関連付けられたネットワーク アドレスを取得する方法はありますか? ?

4

1 に答える 1

1

ネットワーク マスクと IP から、ネットワーク IP を計算できます。

wifii= (WifiManager) getSystemService(Context.WIFI_SERVICE);
 d=wifii.getDhcpInfo();
 s_dns1="DNS 1: "+String.valueOf(d.dns1);
 s_dns2="DNS 2: "+String.valueOf(d.dns2);    
 s_gateway="Default Gateway: "+String.valueOf(d.gateway);    
 s_ipAddress="IP Address: "+String.valueOf(d.ipAddress); 
 s_leaseDuration="Lease Time: "+String.valueOf(d.leaseDuration);     
 s_netmask="Subnet Mask: "+String.valueOf(d.netmask);    
 s_serverAddress="Server IP: "+String.valueOf(d.serverAddress);
于 2013-01-12T12:46:42.713 に答える