我想创建一个InetSocketAddress对象,但无论我得到的是host:port还是ip:port,我都想做正确处理。我发现它有两个构造函数,一个用于host(String类型),另一个用于IP(InetAddress类型)。我是否需要自己确定我得到的是IP还是HOST来选择这两个构造函数之一?我是否遗漏了什么?
我想创建一个InetSocketAddress对象,但无论我得到的是host:port还是ip:port,我都想做正确处理。我发现它有两个构造函数,一个用于host(String类型),另一个用于IP(InetAddress类型)。我是否需要自己确定我得到的是IP还是HOST来选择这两个构造函数之一?我是否遗漏了什么?
您可以从Javadoc中推断,并在源代码中查看,new InetSocketAddress(String hostname, int port)
调用了InetAddress.getByName(hostname)
,它已经为您作出了详细记录的所有处理。
因此,您发布的问题实际上不存在。只需传递任何字符串,无论是主机名还是IP地址。
我不太确定你在问什么,但是我在我的电脑上进行了快速测试,没有任何问题。
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地址还是主机名。我会使用正则表达式来判断是否为IP地址。如果失败了,那么它很可能是主机名。
IP地址和主机名都是字符串,因此您只需要一个构造函数。
new InetSocketAddress(8080)
它在内部调用InetAddress.anyLocalAddress()