Russian Qt Forum
Июнь 11, 2024, 00:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Клиент не может соединиться с сервером  (Прочитано 12737 раз)
crossly
Гость
« Ответ #15 : Сентябрь 28, 2010, 13:02 »

почему к сожалению....?? в добавок ко всему я так понимаю ip по dhcp раздается?? Улыбающийся
Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #16 : Сентябрь 28, 2010, 13:09 »

[offtop]
Потому, что сервер может быть физически недоступен - установлен где-то в другом месте, нет доступа и т.п. А вариант с пингом может помочь в такой ситуации (если только на сервере не приняты спец. меры по блокировке icmp и отключению NetBIOS (блокировке служб).
Если у сервера ip динамический - все гораздо хуже. Сработает только на текущую резервацию DHCP (48 часов по-умолчанию на маршрутизаторе).Поможет только статический, либо динамический с резервацией по MAC
[/offtop]
Записан
crossly
Гость
« Ответ #17 : Сентябрь 28, 2010, 14:18 »

ну.... во первых... если человек который устанавливает ПО на сервер по определению должен знать его ip.... и по второму... если дописать немного кода серверу и клиенту, то клиент и сам сможет узнать адрес сервера...
Записан
merke
Гость
« Ответ #18 : Сентябрь 28, 2010, 14:20 »

Цитировать
если дописать немного кода серверу и клиенту, то клиент и сам сможет узнать адрес сервера...
   
А можно подробнее о таком фокусе?
Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #19 : Сентябрь 28, 2010, 14:25 »

DHCP + DNS (в локальной сети), DNS (для серверов с выделенным ip в инете, либо при динамическом адресе в инете поможет DynDNS). Это в плане организации. А в плане Qt смотрим http://doc.qt.nokia.com/4.6/network-programming.html#resolving-host-names-using-qhostinfo (смотреть пример по lookupHost).
« Последнее редактирование: Сентябрь 28, 2010, 14:29 от Hellraiser » Записан
crossly
Гость
« Ответ #20 : Сентябрь 28, 2010, 14:28 »

1. да DNS.
2. использовать udp broadcast..... клиент шлет датаграмму в сеть.... сервер ловит и сообщает клиенту свой адрес...
Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #21 : Сентябрь 28, 2010, 14:31 »

Тоже очень хороший вариант - в локальной сети так даже лучше (чтобы не мудрить с поднятием DNS-сервера в локалке)
Записан
merke
Гость
« Ответ #22 : Сентябрь 28, 2010, 14:34 »

Так теперь понятно! Спасибо!

Теперь какую функцию вызвать в QTcpServer дабы получить реальный адрес сервера?
Записан
crossly
Гость
« Ответ #23 : Сентябрь 28, 2010, 14:37 »

ээ... не совсем понял... для чего на сервере узнавать его же адрес??

сори торможу
Код:
QHostAddress QTcpServer::serverAddress () const
« Последнее редактирование: Сентябрь 28, 2010, 14:41 от crossly » Записан
merke
Гость
« Ответ #24 : Сентябрь 28, 2010, 14:43 »

Блин уже после всего дня гоню блин.
Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #25 : Сентябрь 28, 2010, 14:54 »

Пусть сервер слушает порт 1234/tcp для обмена данными и порт 1234/udp для ответа адреса (см. здесь http://doc.qt.nokia.com/4.6/network-programming.html#using-udp-with-qudpsocket). По приходу udp-запроса на порт 1234 сервер отвечает по адресу клиента (а его он узнает из 3-го параметра в readDatagram) сообщением со своим ip. Клиент принимает сообщение (значит надо чтобы он тоже слушал определенный udp-порт), узнает адрес сервера и устанавливает соединение. Как-то так.
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.049 секунд. Запросов: 22.