【问题标题】:Java Server Socket binding multiple domain/host namesJava Server Socket绑定多个域名/主机名
【发布时间】:2013-05-25 15:29:20
【问题描述】:

我有一个 ip 地址为 192.168.0.1 的 java nio 服务器在端口 80 上侦听。我将此服务器配置为绑定到多个域/主机名,假设 server1、server2、server3 都解析为 192.168.0.1。

现在我希望如果客户端连接到 server1,在服务器端,我可以识别客户端连接到 server1 而不是其他名称或直接 IP 地址,这样我就可以做一些特别的事情,如果客户端正在连接到 server2,我可以识别出客户端正在请求 server2,所以我可以做一些其他特殊的事情,等等。

现在的问题是:似乎在服务器端,我无法轻松获得客户端连接到哪个服务器名称的正确信息。

我有以下代码:

ServerSocketChannel ssChannel = (ServerSocketChannel) selKey.channel();
String boundHost = sChannel.socket().getLocalAddress().getHostName();

但它不起作用,即使客户端连接到 server2 或 server3,boundHost 始终是 server1。

【问题讨论】:

    标签: java serversocket


    【解决方案1】:

    您无法从套接字获取此类信息:套接字不知道主机名,只知道 IP 地址。

    如果以 HTTP 为例,一个主机与另一个主机的区别在于 HTTP 标头中的 Host 标头。

    因此,只有在您使用的协议中包含主机名信息时,您才能区分不同的服务器。

    【讨论】:

    • 感谢 fge 的回答。那么Java,甚至C语言有没有可能获得这些信息呢?实际上,我希望制作一个 TCP 层多路复用器/代理。我知道 Apache2 有一个代理模块,它实际上会侵入协议以获取此信息。但我不想那样做。我希望让它对上层协议完全透明。
    • 或者这在技术上绝对不可能?谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-26
    • 2018-03-21
    • 1970-01-01
    • 2014-03-03
    相关资源
    最近更新 更多