InetSocketAddressを作成したいのですが、host:portまたはip:portのどちらを取得しても、正しく作成したいと思います。ホスト(String)用とIP(InetAddress)用の2つのコンストラクターがあることがわかります。これらの2つのコンストラクターのどちらかを選択するために、IPまたはHOSTのどちらを取得したかを自分で判断する必要がありますか?ここで何かが足りませんか?
36569 次
4 に答える
18
Javadocから推測し、ソースコードで、をnew InetSocketAddress(String hostname, int port)
呼び出すInetAddress.getByName(hostname)
ことができます。これにより、文書化されているようにすべてが分類されます。
したがって、投稿している問題は実際には存在しません。ホスト名かIPアドレスかに関係なく、取得した文字列を渡すだけです。
于 2012-08-18T01:01:51.300 に答える
3
何を求めているのか完全にはわかりませんが、このクイックテストを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アドレス、ホスト名、またはその他の形式??
于 2012-08-17T23:17:08.317 に答える
0
コンストラクターに渡される文字列がIP名であるかホスト名であるかを判別する必要があります。IPアドレスの正規表現を使用して実行します。それが失敗した場合、それはおそらくホスト名です。
IPアドレスとホスト名はどちらも文字列であるため、コンストラクターは1つだけです。
于 2012-08-17T23:26:07.863 に答える
0
また、 DNS名またはIPがわからない場合は、ポートのみでコンストラクターを使用できます。
new InetSocketAddress(8080)
内部で呼び出しますInetAddress.anyLocalAddress()
于 2020-09-10T15:51:08.303 に答える