Russian Qt Forum

Qt => Работа с сетью => Тема начата: mcrads от Февраль 11, 2010, 10:04



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

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

Был вариант перебирать сервы от 0.0.0.0 до 255.255.255.255 но мне кажется это не катит.


Название: Re: Поиск сервера
Отправлено: Amigo_sa от Февраль 11, 2010, 10:32
Пербирать все сервы - это состариться можно в ожидании :) Проще отправить пакет на broadcast-адресс, предварительно его рассчитав, тот кто откликнется - тот и сервак.
Только нужно быть уверенным, что в сети не режутся рассылки.


Название: Re: Поиск сервера
Отправлено: mcrads от Февраль 11, 2010, 10:54
как это можно реализовать тогда?
QTcpSocket socket;
socket.connectToHost(QHostAddress::Broadcast, 500);
socket << data

?? и? так? а дальше?


Название: Re: Поиск сервера
Отправлено: mcrads от Февраль 11, 2010, 11:30
опять пересмотрел документацию и еще больше запутался. да, Бродкаст это идея - но как все же реализовать?


Название: Re: Поиск сервера
Отправлено: Amigo_sa от Февраль 11, 2010, 11:40
Открыть TCP сокет на бродкастовый адрес нельзя. Это же не конкретный комп. Для рассылки нада пользоваться протколом UDP.


Название: Re: Поиск сервера
Отправлено: mcrads от Февраль 11, 2010, 11:52
в таком случае мы ведь можем по UDP вывесить свой IP для всех и данные о серве. а остальные уже по получении будут по Tcp коннектиться по полученному IP? так может получиться?


Название: Re: Поиск сервера
Отправлено: Amigo_sa от Февраль 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).
Адреса клиентов и серверов даже не надо запихивать в пакет, они нам приходят в заголоках.


Название: Re: Поиск сервера
Отправлено: mcrads от Февраль 11, 2010, 14:16
Супер, спасибо! попробую!


Название: Re: Поиск сервера
Отправлено: mcrads от Февраль 13, 2010, 15:52
Отлично, у меня все получилось =)