簡體   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