13

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

4

4 に答える 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 に答える