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

时间:2012-08-17 23:09:35

标签: java sockets networking tcp network-programming

我想创建一个InetSocketAddress,但无论我是否获得主机:端口或ip:端口,我都想做到这一点。我看到它有两个构造函数,一个用于host(String),另一个用于IP(InetAddress)。如果我有IP或HOST以便在这两个构造函数之间进行选择,我是否必须确定自己?我在这里错过了什么吗?

4 个答案:

答案 0 :(得分:17)

您可以从Javadoc推断,并在源代码中看到new InetSocketAddress(String hostname, int port)调用InetAddress.getByName(hostname),它们会根据文档对您进行排序。

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

答案 1 :(得分: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地址,主机名或其他形式??

答案 2 :(得分:0)

您必须确定传递给构造函数的String是IP还是主机名。我用IP地址的Regex做。如果失败,它可能是主机名。

IP地址和主机名都是String,因此您将只知道一个构造函数。

答案 3 :(得分:0)

另外值得一提的是,如果您不知道自己的 dns 名称或 ip ,则可以仅将构造器与port一起使用。

new InetSocketAddress(8080)

它在内部调用InetAddress.anyLocalAddress()