0

ポート 80 でリッスンする IP アドレス 192.168.0.1 の Java nio サーバーがあります。このサーバーを複数のドメイン/ホスト名にバインドするように構成しました。たとえば、server1、server2、server3 はすべて 192.168.0.1 として解決されます。

クライアントがserver1に接続している場合、サーバー側では、クライアントが他の名前や直接のIPアドレスではなくserver1に接続していることを認識できるため、何か特別なことを行うことができ、クライアントが接続している場合server2 に対して、クライアントが server2 を要求していることを認識できるので、別の特別なことを行うことができます。

問題は次のとおりです。サーバー側のようですが、クライアントが接続しているサーバー名の正しい情報を簡単に取得できません。

私は次のコードを持っています:

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

クライアントがserver2またはserver3に接続しても、boundHostは常にserver1です。

4

1 に答える 1

3

ソケットからこの種の情報を取得することはできません。ソケットはホスト名を認識せず、IP アドレスのみを認識します。

HTTP を例にとると、ホストを他のホストと区別するのはHost、HTTP ヘッダー内のヘッダーです。

したがって、使用するプロトコルにホスト名情報が含まれている場合にのみ、異なるサーバーを区別できます。

于 2013-05-25T15:38:13.500 に答える