Russian Qt Forum
Ноябрь 23, 2024, 15:00
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Работа с сетью
>
QUdpSocket,QTcpSocket NAT
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: QUdpSocket,QTcpSocket NAT (Прочитано 5687 раз)
kip_one
Гость
QUdpSocket,QTcpSocket NAT
«
:
Февраль 19, 2013, 18:38 »
Всем добрый день. Я уже не первый день ломаю голову над тем как реализовать идею такого типа:
В наличии есть одна сервер-программа и некое количество клиентов(1,5,10...).
Клиенты подключаются на сервер(по QTcpSocket and QUdpSocket). Когда другая клиентская программа подключается , сервер высылает ему сообщение кто в сети(QTcpSocket,QTcpServer).Когда клиент меняет статус - его статус меняется у всех его друзей(других клиентов в сети).
До этого этапа все работает
В случае когда клиент хочет отправить сообщение другому клиенту, он посылает на сервер запрос на который сервер присылает ему ip,port(qudpsocket) нужного ему клиента. Так вот когда я отправляю сообщение по данному адресу - элементарно не приходит.
Если же самому задать порт для QUdpSocket и открыть порт на роутере - то все приходит.
Можно ли все это провернуть без участия роутера. Хотелось бы передавать напрямую пакеты. Читал по STUN, но что-то не пошло.
Буду рад любой помощи
«
Последнее редактирование: Февраль 19, 2013, 18:51 от kip_one
»
Записан
alexis031182
Гость
Re: QUdpSocket,QTcpSocket NAT
«
Ответ #1 :
Февраль 19, 2013, 23:31 »
В одной игрушке (Warzone 2100) как-то в исходниках наткнулся на реализацию UPnP. Оно там правда по TCP связь налажена, но скорее всего UDP тоже можно прицепить. Схема сетевого взаимодействия в игре похожа на то, что Вы описали. Есть сервер (лобби) и куча клиентов (в т.ч. и за NAT), каждый из которых, в свою очередь может стать сервером для других на время побоища.
Записан
kip_one
Гость
Re: QUdpSocket,QTcpSocket NAT
«
Ответ #2 :
Февраль 20, 2013, 00:05 »
Если я правильно понимаю, то стать сервером за NAT без настройки на роутере не получится. Мне не обязательно использовать QUdpSocket, но с ним мне кажется дела пойдут легче.
А вообще я уже начинаю думать что это просто плохая идея передавать на прямую. Вместо этого можно использовать сервер через который будет проходить весь обмен пакетами. Это на порядок легче.
Будут какие-то советы по этому поводу?
Записан
alexis031182
Гость
Re: QUdpSocket,QTcpSocket NAT
«
Ответ #3 :
Февраль 20, 2013, 00:53 »
Так вот как раз UPnP и используется, чтобы клиентам свои роутеры не приходилось "трогать". Там, в игре лобби просто содержит список тех компов, что изволили хостить бои (это могут быть обычные машины, сидящие за NAT). Другие клиенты подключаются к лобби и получают список этих активных хостеров. Выбирают себе приглянувшегося, и подключаются к хостящему без каких-либо неудобоваримых телодвижений со стороны последнего.
Так что то, что Вы задумали сделать в своём проекте вполне реализуемо, просто надо плотнее изучить тему. Что касаемо примера реализации, то вышеназванная игрушка уже содержит в своём коде соответствующие строки. Загляните туда. Open Source. Кажется, файл "network.cpp", если мне не изменяет память.
Записан
alexis031182
Гость
Re: QUdpSocket,QTcpSocket NAT
«
Ответ #4 :
Февраль 20, 2013, 00:57 »
Цитата: kip_one от Февраль 20, 2013, 00:05
...
А вообще я уже начинаю думать что это просто плохая идея передавать на прямую. Вместо этого можно использовать сервер через который будет проходить весь обмен пакетами. Это на порядок легче.
Будут какие-то советы по этому поводу?
Вообще, из задачи надо исходить. Часто, централизация действительно необходима. Но если предполагается, например, чат тет-а-тет, то увеличение трафика, по идее, особо и ни к чему.
Записан
kip_one
Гость
Re: QUdpSocket,QTcpSocket NAT
«
Ответ #5 :
Февраль 20, 2013, 19:59 »
После того как приведу код в порядок думаю попробовать передавать клиент-сервер-клиент аудио и видео поток.
Как вы думаете сколько таких клиентов сможет обслуживать такой сервер?
Записан
Old
Джедай : наставник для всех
Online
Сообщений: 4350
Re: QUdpSocket,QTcpSocket NAT
«
Ответ #6 :
Февраль 20, 2013, 20:07 »
Цитата: kip_one от Февраль 20, 2013, 19:59
Как вы думаете сколько таких клиентов сможет обслуживать такой сервер?
В большей степени это будет зависеть от "толщины" канала к серверу. Сервер будет по сути просто проксировать потоки.
Записан
alexis031182
Гость
Re: QUdpSocket,QTcpSocket NAT
«
Ответ #7 :
Февраль 20, 2013, 22:10 »
Вот интересно, по какому принципу работают всякие хамачи. Тоже какие-нибудь используются методы соединения через NAT или совсем иное?
Записан
Bepec
Гость
Re: QUdpSocket,QTcpSocket NAT
«
Ответ #8 :
Февраль 20, 2013, 22:12 »
Хамачи же вроде через сервер работает?
Записан
alexis031182
Гость
Re: QUdpSocket,QTcpSocket NAT
«
Ответ #9 :
Февраль 20, 2013, 23:00 »
Цитата: Bepec от Февраль 20, 2013, 22:12
Хамачи же вроде через сервер работает?
Да? Я думал там через сервер только данные для организации соединения передаются, а непосредственно само сетевое соединение устанавливается между клиентами напрямую.
Записан
Bepec
Гость
Re: QUdpSocket,QTcpSocket NAT
«
Ответ #10 :
Февраль 20, 2013, 23:23 »
Незнай. Насколько я помню, гамали давным давно в age of empires через него. И как только он не мог связаться со своим сервером, всё падало.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...