Название: QUdpSocket,QTcpSocket NAT Отправлено: kip_one от Февраль 19, 2013, 18:38 Всем добрый день. Я уже не первый день ломаю голову над тем как реализовать идею такого типа:
В наличии есть одна сервер-программа и некое количество клиентов(1,5,10...). Клиенты подключаются на сервер(по QTcpSocket and QUdpSocket). Когда другая клиентская программа подключается , сервер высылает ему сообщение кто в сети(QTcpSocket,QTcpServer).Когда клиент меняет статус - его статус меняется у всех его друзей(других клиентов в сети). До этого этапа все работает :) В случае когда клиент хочет отправить сообщение другому клиенту, он посылает на сервер запрос на который сервер присылает ему ip,port(qudpsocket) нужного ему клиента. Так вот когда я отправляю сообщение по данному адресу - элементарно не приходит. Если же самому задать порт для QUdpSocket и открыть порт на роутере - то все приходит. Можно ли все это провернуть без участия роутера. Хотелось бы передавать напрямую пакеты. Читал по STUN, но что-то не пошло. Буду рад любой помощи :) Название: Re: QUdpSocket,QTcpSocket NAT Отправлено: alexis031182 от Февраль 19, 2013, 23:31 В одной игрушке (Warzone 2100) как-то в исходниках наткнулся на реализацию UPnP. Оно там правда по TCP связь налажена, но скорее всего UDP тоже можно прицепить. Схема сетевого взаимодействия в игре похожа на то, что Вы описали. Есть сервер (лобби) и куча клиентов (в т.ч. и за NAT), каждый из которых, в свою очередь может стать сервером для других на время побоища.
Название: Re: QUdpSocket,QTcpSocket NAT Отправлено: kip_one от Февраль 20, 2013, 00:05 Если я правильно понимаю, то стать сервером за NAT без настройки на роутере не получится. Мне не обязательно использовать QUdpSocket, но с ним мне кажется дела пойдут легче.
А вообще я уже начинаю думать что это просто плохая идея передавать на прямую. Вместо этого можно использовать сервер через который будет проходить весь обмен пакетами. Это на порядок легче. Будут какие-то советы по этому поводу? Название: Re: QUdpSocket,QTcpSocket NAT Отправлено: alexis031182 от Февраль 20, 2013, 00:53 Так вот как раз UPnP и используется, чтобы клиентам свои роутеры не приходилось "трогать". Там, в игре лобби просто содержит список тех компов, что изволили хостить бои (это могут быть обычные машины, сидящие за NAT). Другие клиенты подключаются к лобби и получают список этих активных хостеров. Выбирают себе приглянувшегося, и подключаются к хостящему без каких-либо неудобоваримых телодвижений со стороны последнего.
Так что то, что Вы задумали сделать в своём проекте вполне реализуемо, просто надо плотнее изучить тему. Что касаемо примера реализации, то вышеназванная игрушка уже содержит в своём коде соответствующие строки. Загляните туда. Open Source. Кажется, файл "network.cpp", если мне не изменяет память. Название: Re: QUdpSocket,QTcpSocket NAT Отправлено: alexis031182 от Февраль 20, 2013, 00:57 ... Вообще, из задачи надо исходить. Часто, централизация действительно необходима. Но если предполагается, например, чат тет-а-тет, то увеличение трафика, по идее, особо и ни к чему.А вообще я уже начинаю думать что это просто плохая идея передавать на прямую. Вместо этого можно использовать сервер через который будет проходить весь обмен пакетами. Это на порядок легче. Будут какие-то советы по этому поводу? Название: Re: QUdpSocket,QTcpSocket NAT Отправлено: kip_one от Февраль 20, 2013, 19:59 После того как приведу код в порядок думаю попробовать передавать клиент-сервер-клиент аудио и видео поток.
Как вы думаете сколько таких клиентов сможет обслуживать такой сервер? Название: Re: QUdpSocket,QTcpSocket NAT Отправлено: Old от Февраль 20, 2013, 20:07 Как вы думаете сколько таких клиентов сможет обслуживать такой сервер? В большей степени это будет зависеть от "толщины" канала к серверу. Сервер будет по сути просто проксировать потоки.Название: Re: QUdpSocket,QTcpSocket NAT Отправлено: alexis031182 от Февраль 20, 2013, 22:10 Вот интересно, по какому принципу работают всякие хамачи. Тоже какие-нибудь используются методы соединения через NAT или совсем иное?
Название: Re: QUdpSocket,QTcpSocket NAT Отправлено: Bepec от Февраль 20, 2013, 22:12 Хамачи же вроде через сервер работает?
Название: Re: QUdpSocket,QTcpSocket NAT Отправлено: alexis031182 от Февраль 20, 2013, 23:00 Хамачи же вроде через сервер работает? Да? Я думал там через сервер только данные для организации соединения передаются, а непосредственно само сетевое соединение устанавливается между клиентами напрямую.Название: Re: QUdpSocket,QTcpSocket NAT Отправлено: Bepec от Февраль 20, 2013, 23:23 Незнай. Насколько я помню, гамали давным давно в age of empires через него. И как только он не мог связаться со своим сервером, всё падало.
|