2013-05-25 43 views
0

我有一个java的nio服务器,IP地址192.168.0.1监听端口80.我配置了这个服务器绑定到多个域名/主机名,比如说server1,server2,server3是全部解析为192.168.0.1。Java服务器套接字绑定多个域/主机名

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

现在的问题是:似乎在服务器端,我不能很容易地得到正确的信息,我的客户端连接到哪个服务器名称。

我有如下代码:

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

但它不工作,boundHost始终是即使客户端连接到Server2或server(服务器)的服务器1。

回答

3

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

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

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

+0

谢谢fge回答。那么Java,甚至C可以获得这些信息吗?其实我希望能够制作一个TCP层多路复用器/代理。我知道Apache2有一个代理模块,它实际上是通过协议来获取这些信息。但我不想这样做。我希望从上层协议中完全透明。 –

+0

或者它在技术上绝对不可能?谢谢。 –