如果我使用特定主机名绑定到特定接口,然后使用ServerSocketChannel.getLocalAddress()来检索绑定地址,那么主机名就会更长。
这是设计还是未定义的行为?有没有办法解决这个问题?
InetSocketAddress bindTo = new InetSocketAddress("my-hostname", 9999);
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
serverSocketChannel.socket().bind(bindTo);
InetSocketAddress localAddr = (InetSocketAddress) serverSocketChannel.getLocalAddress();
System.out.println(bindTo);
System.out.println(localAddr);
> my-hostname/10.20.200.201:9999
> /10.20.200.201:9999
上面示例中的“my-hostname”是将解析为本地IP的几个主机名之一。但是,它不是IP在进行反向查找时解析的主机名。
我问的原因是我使用的框架将绑定然后将服务信息发布到中央注册表。但是,它使用.getLocalAddress()检索绑定的地址,最终导致发布错误的主机名。
答案 0 :(得分:0)
主机名更长
你的意思是"那里的主机名更长"由InetAddress.toString().
返回的字符串中的没有任何东西可以强制这种行为。套接字绑定的本地地址主要是IP地址。如果您想将其映射到主机名,那就由您决定。