2013-05-25 44 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

或者它在技術上絕對不可能?謝謝。 –