Получить имя сервера в TCP-сервере

Можно ли получить адрес сервера, используемый клиентом TCP? Клиент может связаться с сервером, используя либо IP-адрес, либо имя хоста / домена.

Я пытаюсь получить доменное имя, используя:

ServerSocket ss = new ServerSocket(port);
Socket s = ss.accept();
System.out.println(s.getLocalAddress().getHostName());
System.out.println(s.getLocalAddress().getCanonicalHostName());

но все, что я получаю, это IP-адрес, всегда!

На HTTP-сервере мы можем добиться того же, используя httpServletRequest.getServerName(), Он возвращает IP-адрес, если HTTP-клиент использует IP-адрес, и возвращает имя домена, если HTTP-клиент использует доменное имя. Так что я вполне уверен, что это должно быть возможно и на уровне TCP.

2 ответа

Если я правильно понимаю ваш вопрос, вы пытаетесь выяснить на сервере - какой IP-адрес использовался "клиентом" для подключения к серверу, когда сервер прослушивает несколько IP-адресов. Это твой вопрос? В этих случаях делать getsockname() на acceptЭд сокет должен дать вам.

Если вы попробовали свой LocalHost поскольку сервер, вероятно, вернет имя, это может быть проблемой DNS; в любом случае попробую тебя localhost в качестве сервера, и если он работал, перейдите на %SystemRoot%\system32\drivers\etc\hosts и определите ваши имена хостов.

Проверь это.

надеюсь, это поможет.

Другие вопросы по тегам