Java Server Socket绑定多个域/主机名

时间:2013-05-25 15:29:21

标签: java serversocket

我有一个java nio服务器,其IP地址为192.168.0.1,侦听端口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。

1 个答案:

答案 0 :(得分:3)

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

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

因此,如果您使用的协议中包含主机名信息,则只能区分不同的服务器。