我想创建一个的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?