Russian Qt Forum
Ноябрь 25, 2024, 10:59 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Поиск сервера  (Прочитано 4294 раз)
mcrads
Гость
« : Февраль 11, 2010, 10:04 »

Доброго времени суток.
Почитал хелпы к Qt, почитал форум и все равно не понял как сделать такую ерунду как поиск сервера.
То есть задача такова - нам неизвестен IP сервера. неизвестно какой адрес прописать в QTcpSocket::connectToHost(hostName, port, openMode) => hostName = ? Как быть в такой ситуации?

Вообще задача такова - пишу игрушку, нужно сделать поиск серва по локалке.

Был вариант перебирать сервы от 0.0.0.0 до 255.255.255.255 но мне кажется это не катит.
Записан
Amigo_sa
Гость
« Ответ #1 : Февраль 11, 2010, 10:32 »

Пербирать все сервы - это состариться можно в ожидании Улыбающийся Проще отправить пакет на broadcast-адресс, предварительно его рассчитав, тот кто откликнется - тот и сервак.
Только нужно быть уверенным, что в сети не режутся рассылки.
Записан
mcrads
Гость
« Ответ #2 : Февраль 11, 2010, 10:54 »

как это можно реализовать тогда?
QTcpSocket socket;
socket.connectToHost(QHostAddress::Broadcast, 500);
socket << data

?? и? так? а дальше?
Записан
mcrads
Гость
« Ответ #3 : Февраль 11, 2010, 11:30 »

опять пересмотрел документацию и еще больше запутался. да, Бродкаст это идея - но как все же реализовать?
Записан
Amigo_sa
Гость
« Ответ #4 : Февраль 11, 2010, 11:40 »

Открыть TCP сокет на бродкастовый адрес нельзя. Это же не конкретный комп. Для рассылки нада пользоваться протколом UDP.
Записан
mcrads
Гость
« Ответ #5 : Февраль 11, 2010, 11:52 »

в таком случае мы ведь можем по UDP вывесить свой IP для всех и данные о серве. а остальные уже по получении будут по Tcp коннектиться по полученному IP? так может получиться?
Записан
Amigo_sa
Гость
« Ответ #6 : Февраль 11, 2010, 12:35 »

Цитировать
qint64 QUdpSocket::readDatagram ( char * data, qint64 maxSize, QHostAddress * address = 0, quint16 * port = 0 )
The sender's host address and port is stored in *address and *port (unless the pointers are 0).
Адреса клиентов и серверов даже не надо запихивать в пакет, они нам приходят в заголоках.
Записан
mcrads
Гость
« Ответ #7 : Февраль 11, 2010, 14:16 »

Супер, спасибо! попробую!
Записан
mcrads
Гость
« Ответ #8 : Февраль 13, 2010, 15:52 »

Отлично, у меня все получилось =)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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