JavaでInetAddressオブジェクトを作成する


82

IP番号または名前で指定されたアドレスを文字列(つまりlocalhostまたは127.0.0.1)でInetAdressオブジェクトに変換しようとしています。コンストラクターはありませんが、InetAddressを返す静的メソッドがあります。したがって、ホスト名を取得しても問題はありませんが、IP番号を取得するとどうなりますか?byte []を取得するメソッドが1つありますが、それがどのように役立つかはわかりません。他のすべてのメソッドはホスト名を取得します。

InetAddressAPIドキュメント

回答:


133

getByNameまたはgetByAddressを使用できるはずです

ホスト名は、「java.sun.com」などのマシン名、またはそのIPアドレスのテキスト表現のいずれかです。

InetAddress addr = InetAddress.getByName("127.0.0.1");

バイト配列を受け取るメソッドは、次のように使用できます。

byte[] ipAddr = new byte[]{127, 0, 0, 1};
InetAddress addr = InetAddress.getByAddress(ipAddr);

3
127より大きい数になったとき、あなたはどうしますか?たとえば、IP192.168.0.1。intを0xFFでマスクしますか?または、intをbyteにキャストしますか?
Matej Kormuth 2015

@ MatejKormuth0xFFによるマスキングは機能するはずだと思います。
Bala R

1
@ matej-kormuth Inet4AddressImplのように表現することもできます:byte[] loopback = {0x7f,0x00,0x00,0x01};
Carlos Ferreyra

「デフォルトコンストラクタが暗黙のスーパーコンストラクタによってスローされる例外タイプはUnknownHostExceptionを扱うことができない、明示的なコンストラクタを定義する必要があります。」
Schütze

inetAddressの作成をtry / catchステートメントで囲むのに役立ちます。
マシューレドモンド

9

InetAddressのAPIから

ホスト名は、「java.sun.com」などのマシン名、またはそのIPアドレスのテキスト表現のいずれかです。リテラルIPアドレスが指定されている場合、アドレス形式の有効性のみがチェックされます。


7
ip = InetAddress.getByAddress(new byte[] {
        (byte)192, (byte)168, (byte)0, (byte)102}
);

3

InetAddress.getByNameは、IPアドレスに対しても機能します。

JavaDocから

ホスト名は、「java.sun.com」などのマシン名、またはそのIPアドレスのテキスト表現のいずれかです。リテラルIPアドレスが指定されている場合、アドレス形式の有効性のみがチェックされます。


3

APIはかなり使いやすいです。

// Lookup the dns, if the ip exists.
 if (!ip.isEmpty()) {
     InetAddress inetAddress = InetAddress.getByName(ip);
     dns = inetAddress.getCanonicalHostName(); 
 }

0

これは、任意のWebサイトのIPアドレスを取得するためのプロジェクトであり、便利で簡単に作成できます。

import java.net.InetAddress;
import java.net.UnkownHostExceptiin;

public class Main{
    public static void main(String[]args){
        try{
            InetAddress addr = InetAddresd.getByName("www.yahoo.com");
            System.out.println(addr.getHostAddress());

          }catch(UnknownHostException e){
             e.printStrackTrace();
        }
    }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.