2014-11-27 4 views
0

У меня есть 3 компьютера, один из них - другие серверы. Клиенты подключаются к серверу, введя локальный IP-адрес сервера. Все работает хорошо, но проблема возникает, когда маршрутизатор перезагружается, а сервер получает другой локальный IP-адрес. Теперь вам нужно снова ввести IP-адрес сервера в клиентах. Я могу решить это, используя локальный статический IP-адрес, но можно ли подключиться без установки локального статического IP-адреса?Подключение локальных компьютеров без локального статического IP

Редактировать: Использование сокета TCP.

+5

Можете ли вы пойти по имени хоста? – Knerd

+1

Какова природа связи между клиентами и сервером? TCP? UDP? какой-то протокол более высокого уровня? –

+1

Почему бы не использовать локальное имя dns? – Rohit

ответ

2

Используйте имя хоста для подключения к удаленному компьютеру, а не его IP-адрес. Однако вам придется полагаться на поиск DNS.

+0

Спасибо, alex, заглянет;) – xmen

1

Ваша проблема возникает из-за использования функции DHCP маршрутизатора. D DHCP означает «Динамический», поэтому в некоторых случаях IP-адреса могут быть изменены.

Наиболее простым решением является «Не использовать DHCP».

[Подробность решения]

Присвоить фиксированный IP-адрес для ваших компьютеров, и использовать его IP-адрес для доступа среди них.

Обычно маршрутизатор использует локальный IP-адрес в диапазоне от 192.168.1.1 до 192.168.1.255 и 192.168.1.1 для самого маршрутизатора.

Возможно использование IP-адресов 192.168.1.2, 192.168.1.3 и 192.168.1.4 для 3 ПК соответственно.

+0

Правда, но просить об этом нормальным пользователям может быть сложно. Не все пользователи могут определять статический IP-адрес. Вот почему я оставил это решение последним.Спасибо :) – xmen

+0

Если новый IP-адрес определяется сервером с помощью функции DHCP маршрутизатора, как узнать новый IP-адрес? Если вы знаете MAC-адрес сервера, вы можете использовать протокол ARP для получения IP-адреса маршрутизатора. К сожалению, у большинства пользователей никогда не было запрограммированного кода, использующего протокол нижнего уровня, такой как ARP. –

1

Одна вещь, которую вы могли бы сделать, как насчет того, чтобы дать серверу конечную точку, которая является уникальным, что-то вроде

http://<server>/isthisme 

Тогда вы просто пройти через все IP-адресов в сети, а затем попытаться достичь этой конечной точки. Тот, где он возвращает 200, который является вашим сервером.

Чтобы получить IP-адрес немного сложнее, в первую очередь необходимо, чтобы получить свой собственный IP-адрес, а затем перейти с маской подсети над ним и в конце концов вы можете просто пойти следующий образом:

for (int p1 = 1; p1 < netmask[0]; p1++) { 
    for (int p2 = 1; p2 < netmask[1]; p2++) { 
     for (int p3 = 1; p3 < netmask[2]; p3++) { 
      for (int p4 = 1; p4 < netmask[3]; p4++) { 
       var ip = new IPAdress(p1, p2, p3, p4); 
       if (trytoreach(ip)) { 
        return ip; 
       } 
      } 
     } 
    } 
} 

Это как вы могли бы пройти. Он не оптимизирован, поэтому не стесняйтесь. ^^

Вот сущность метода https://gist.github.com/DerKnerd/ff9c34087955efce0970. Просто часть с маской подсети нужно выяснить. Я не гарантирую, что это сработает.

+0

Это звучит неплохо, можете ли вы сказать, какой метод это, чтобы получить все IP-адреса локального компьютера. – xmen

+0

@ xmenW.K. проверьте обновление. У меня когда-то была проблема с малиновыми ИП. Я использовал что-то подобное, чтобы получить IP-адреса. – Knerd

+0

Он уверен, что сработает. Спасибо :) – xmen

Смежные вопросы