【发布时间】:2015-06-14 10:42:37
【问题描述】:
是否可以获取 TCP 客户端使用的服务器地址?客户端可以使用 IP 地址或主机/域名访问服务器。
我正在尝试使用以下方式获取域名:
ServerSocket ss = new ServerSocket(port);
Socket s = ss.accept();
System.out.println(s.getLocalAddress().getHostName());
System.out.println(s.getLocalAddress().getCanonicalHostName());
但我得到的只是 IP 地址,永远如此!
在 HTTP 服务器中,我们可以使用 httpServletRequest.getServerName() 实现相同的目的。如果 HTTP 客户端使用 IP 地址,则返回 IP 地址;如果 HTTP 客户端使用域名,则返回域名。所以我很确定在 TCP 级别也应该是可能的。
【问题讨论】:
-
If you read the docs,您会看到 getServerName(..) 不是从 TCP 级别的某些内容中读取的。它实际上是从作为 HTTP 请求的一部分发送的
Host: yourServer.com标头中读取的。在 TCP 级别,您只有 IP 地址,最好的办法是尝试将它们解析为主机名(您现在正在做的方式)。
标签: java sockets tcp hostname domain-name