Когда несколько компьютеров имеют одинаковые IP-адреса, как вы можете подключиться к одному из них программно? - PullRequest
1 голос
/ 19 января 2010

Этот вопрос немного сложно сформулировать, и я не уверен, что понимаю основную проблему, но здесь идет речь: У меня есть программа чата Java. Я запускаю его, используя 2 jar-файла - сервер и клиент. Вы запускаете сервер в фоновом режиме на компьютере, а затем, когда вы запускаете клиент, вам просто нужно ввести IP-адрес компьютера, на котором запущен сервер, и нажать «Подключиться». Я использовал это несколько раз, и это всегда работало. Моя проблема сейчас в том, что, хотя я все еще могу заставить его работать в нашей домашней сети, используя локальный IP-адрес (тот, который начинается с 192), я не могу заставить его работать с использованием публичного / глобального IP-адреса. Я заметил, что все наши домашние компьютеры, которые все подключены к одному и тому же модему (маршрутизатору?), Имеют один и тот же глобальный IP-адрес (я проверил whatismyipaddress.com). Может ли это быть проблемой? Если все наши компьютеры имеют одинаковый IP-адрес, как программа узнает, какой из них использовать для серверной программы? Любые идеи о том, как я могу заставить это работать?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 19 января 2010

То, что делает ваша сеть, называется " преобразование сетевых адресов " или NAT. Когда машина в локальной сети (клиент) хочет связаться с машиной за пределами сети (сервер, такой как интернет-хост с публичным IP-адресом), маршрутизатор отслеживает, куда следует отправлять пакеты, и доставляет их обратно соответствующего клиента, даже если пакеты, предназначенные для разных клиентов в локальной сети, будут приходить на один и тот же IP-адрес.

Это прекрасно работает, если клиент устанавливает соединение с сервером. Сервер не может инициировать соединение обратно к клиенту и не может произвольно отправлять UDP-пакеты, если, как упоминалось в danben, не настроена статическая переадресация портов.

Существует UPnP , который позволяет клиентам в основном устанавливать свои собственные правила временного перенаправления портов, но я не знаю много о специфике.

Что вы должны сделать, это сделать так, чтобы клиент установил TCP / IP-соединение с сервером, и тогда весь трафик на этом соединении, как восходящий, так и нисходящий, должен нормально обрабатываться маршрутизатором. Если у вашего сервера нет общедоступного IP-адреса, вам необходимо настроить статическую переадресацию портов на маршрутизаторе таким образом, чтобы весь трафик, поступающий на определенный порт, направлялся на частный IP-адрес внутри сети. Это, вероятно, означает, что вам также необходимо назначить статический частный IP-адрес серверу.

2 голосов
/ 19 января 2010

Это действительно относится к ошибке сервера. Но короткий ответ заключается в том, что вам необходимо настроить переадресацию портов на маршрутизаторе. Это сообщает маршрутизатору, для входящих запросов на данный порт, внутренний IP-адрес компьютера, на который должны быть направлены эти запросы. Проверьте http://www.portforward.com для подробных инструкций.

0 голосов
/ 19 января 2010

Тот факт, что все компьютеры в сети имеют одинаковый внешний IP-адрес (если смотреть из-за пределов вашей сети), не означает, что все они имеют одинаковый IP-адрес внутри вашей сети.

Скорее всего, ваш маршрутизатор назначает внутренние / частные IP-адреса каждому компьютеру в сети, возможно начиная с 192.168 или 10. что-то. Это IP-адрес, который компьютеры внутри вашей сети используют для связи друг с другом.

...