我想创建一个 InetSocketAddress,但无论我得到一个主机:端口还是 ip:端口,我都想正确地做到这一点。我看到它有两个构造函数,一个用于主机(字符串),另一个用于 IP(InetAddress)。我是否必须确定自己是否获得了 IP 或 HOST 才能在这两个构造函数之间进行选择?我在这里错过了什么吗?
问问题
36569 次
4 回答
18
您可以从 Javadoc 中推断,并在源代码中查看new InetSocketAddress(String hostname, int port)
调用InetAddress.getByName(hostname)
,它会按照文档为您整理所有内容。
因此,您发布的问题实际上并不存在。只需传递您获得的任何字符串,无论是主机名还是 IP 地址。
于 2012-08-18T01:01:51.300 回答
3
我不完全确定你的要求是什么,但是,我在我的电脑上做了这个快速测试,没有任何问题
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 地址和主机名都是字符串,因此您将只使用一个构造函数。
于 2012-08-17T23:26:07.863 回答
0
另外值得一提的是,如果您不知道您的dns名称或ip,您可以简单地使用仅带有端口的构造函数。
new InetSocketAddress(8080)
它在内部调用InetAddress.anyLocalAddress()
于 2020-09-10T15:51:08.303 回答