web-dev-qa-db-ja.com

任意のホストとIPアドレスを使用してInetSocketAddressを構築する正しい方法は何ですか?

InetSocketAddressを作成したいのですが、Host:portまたはip:portのどちらを取得しても正しく作成したいと思います。 Host(String)用とIP(InetAddress)用の2つのコンストラクターがあるようです。これらの2つのコンストラクターから選択するために、IPまたはホストのどちらを取得したかを自分で判断する必要がありますか?ここで何かが足りませんか?

13
JohnPristine

Javadocから推測し、ソースコードで、new InetSocketAddress(String hostname, int port)InetAddress.getByName(hostname)を呼び出すことを確認できます。これにより、文書化されているようにすべてが分類されます。

したがって、投稿している問題は実際には存在しません。ホスト名かIPアドレスかに関係なく、取得した文字列を渡すだけです。

17
user207421

何を求めているのか完全にはわかりませんが、このクイックテストをPCで問題なく実行しました。

try {

    String ipAddress = ""; // Add your own
    String hostName = ""; // Add your own

    int port = ...; // You'll need some sort of service to connect to


    InetSocketAddress byAddress1 = new InetSocketAddress(ipAddress, port);
    InetSocketAddress byAddress2 = new InetSocketAddress(InetAddress.getByName(ipAddress), port);

    InetSocketAddress byName1 = new InetSocketAddress(hostName, port);
    InetSocketAddress byName2 = new InetSocketAddress(InetAddress.getByName(hostName), port);

} catch (UnknownHostException unknownHostException) {
    unknownHostException.printStackTrace();
}

より大きな問題は、入力として何が得られると期待されるかということです。 IPアドレス、ホスト名、またはその他の形式??

2
MadProgrammer

コンストラクターに渡される文字列がIP名であるかホスト名であるかを判別する必要があります。 IPアドレスの正規表現を使用して行います。それが失敗した場合、それはおそらくホスト名です。

IPアドレスとホスト名はどちらも文字列であるため、コンストラクターは1つだけです。

0
ksnortum