什么是构建的InetSocketAddress与任何主机的IP地址的正确方法是什么?(What is

2019-09-21 08:05发布

我想创建一个的InetSocketAddress,但我想这样做是正确的,不管,如果我得到一台主机:端口或IP:端口。 我看到它有两个构造,一个主机(字符串),另一个用于IP(InetAddress类)。 我一定要确定自己,如果我为了这两个构造之间选择了一个IP或主机? 我失去了一些东西在这里?

Answer 1:

您可以从Javadoc中推断,并查看源代码,即new InetSocketAddress(String hostname, int port)调用InetAddress.getByName(hostname) ,作为记录这种种一切为你。

所以,你要发布关于这个问题实际上并不存在。 只是通过你得到任何字符串,无论是主机名或IP地址。



Answer 2:

我不能完全肯定它是什么,你的要价,但是,我做了我的电脑上这个快速测试,没有任何问题

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地址,主机名或一些其他形式?



Answer 3:

你将不得不决定传递给构造函数的字符串是否是一个IP或主机名。 我与该IP地址的正则表达式做到这一点。 如果失败,它可能是一个主机名。

这两个IP地址和主机名是字符串,那么你会怎么只有一个构造函数。



文章来源: What is the correct way to construct InetSocketAddress with any host an IP address?