InetSocketAddressを作成したいのですが、Host:portまたはip:portのどちらを取得しても正しく作成したいと思います。 Host(String)用とIP(InetAddress)用の2つのコンストラクターがあるようです。これらの2つのコンストラクターから選択するために、IPまたはホストのどちらを取得したかを自分で判断する必要がありますか?ここで何かが足りませんか?
Javadocから推測し、ソースコードで、new InetSocketAddress(String hostname, int port)
がInetAddress.getByName(hostname)
を呼び出すことを確認できます。これにより、文書化されているようにすべてが分類されます。
したがって、投稿している問題は実際には存在しません。ホスト名かIPアドレスかに関係なく、取得した文字列を渡すだけです。
何を求めているのか完全にはわかりませんが、このクイックテストを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アドレス、ホスト名、またはその他の形式??
コンストラクターに渡される文字列がIP名であるかホスト名であるかを判別する必要があります。 IPアドレスの正規表現を使用して行います。それが失敗した場合、それはおそらくホスト名です。
IPアドレスとホスト名はどちらも文字列であるため、コンストラクターは1つだけです。