繁体   English   中英

Java的ServerSocketChannel.getLocalAddress()与传递给bind()的InetSocketAddress不同

[英]Java's ServerSocketChannel.getLocalAddress() differs from InetSocketAddress passed to bind()

如果我使用特定的主机名绑定到特定的接口,然后使用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()检索绑定地址,最终导致发布错误的主机名。

主机名在那里更长

您的意思是InetAddress.toString().返回的字符串中的 “主机名在那里更长” InetAddress.toString(). 没有什么可以限制这种行为。 套接字绑定到的本地地址主要是IP地址。 如果要将其映射到主机名,则由您决定。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM