Есть ли способ, которым сервер знает имя хоста подключающегося клиента? - PullRequest
0 голосов
/ 31 июля 2011

Клиенту присваивается имя хоста сервера, чтобы клиент мог подключиться к серверу с заданным именем хоста.

//client side
host = new InetSocketAddress ( args[0], 50000); // args[0] = server's address
sockfd = new Socket(host.getHostName(),host.getPort());



//server side
sockfd = new ServerSocket(50000);
Socket clientfd= sockfd.accept ();

Когда клиент подключается к server A, как указано выше, есть ли способ для server A узнать имя хоста клиента? Потому что server A должен сказать другому server B, чтобы он дал этому клиенту несколько сообщений.

Если нет, как подключенный server A должен уведомить server B о подключении к клиенту?

Клиент также имеет ServerSocket, который может принимать соединение от server B

Ответы [ 2 ]

1 голос
/ 31 июля 2011

сервер A может использовать getInetAddress и getHostName для определения имени хоста клиента. Однако имя хоста не требуется, поскольку вы также можете получить IP-адрес клиента из сокета:

Socket clientfd = sockfd.accept();
InetAddress clientIA = clientfd.getInetAddress();
String clientHN = clientIA.getHostName();
byte[] clientIP = clientIA.getAddress();

Проблемы с сетью, упомянутые Грегом, все еще актуальны; подключение сервера к любому клиенту может быть трудным или невозможным.

0 голосов
/ 31 июля 2011

Один из подходов состоит в том, чтобы клиент отправлял свое имя хоста на сервер A, который сервер A затем передавал бы серверу B, чтобы сервер B мог отправлять клиентские сообщения.Вы хотели бы убедиться, что клиент не лжет о своем собственном имени хоста, и что DNS настроен на правильное сопоставление имени с адресом клиента (это обычно находится вне прямого контроля клиентского компьютера).

Обратите внимание, что обычно возникают проблемы с подключением «сервера» к «клиенту», особенно с сетевыми проблемами, такими как NAT и брандмауэры.Вероятно, лучшая идея состоит в том, чтобы клиент установил второе соединение с сервером B, чтобы сервер B мог напрямую связываться с клиентом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...