使用任何主机的 IP 地址构造 InetSocketAddress 的正确方法是什么?

我想创建一个InetSocketAddress,但无论我得到一个host:port还是一个ip:port,我都想把它做好。我看到它有两个构造函数,一个用于主机(字符串),另一个用于IP(InetAddress)。我是否必须自己确定自己是否拥有 IP 或 HOST 才能在这两个构造函数之间进行选择?我在这里错过了什么吗?


答案 1

您可以从Javadoc中推断出来,并在源代码中看到 调用 ,它按照文档为您整理所有内容。new InetSocketAddress(String hostname, int port)InetAddress.getByName(hostname)

因此,您发布的问题实际上并不存在。只需传递您获得的任何字符串,无论是主机名还是IP地址。


答案 2

我不完全确定你的要求是什么,但是,我在我的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地址,主机名或其他形式??


推荐