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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: TCP/IP  (Прочитано 4617 раз)
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« : Июнь 14, 2011, 15:31 »

Подскажите пожалуйста, можно ли использовать m_ptcpServer->nextPendingConnection()
 для связей с несколькими клиентами и как сделать это грамотно? Спасибо!
Записан
RedDog
Гость
« Ответ #1 : Июнь 14, 2011, 15:44 »

В примерах куча информации
а nextPendingConnection() возвращает указатель на сокет, через который будет идси связь с конкретным клиентом
сколько клиентов, столько сокетов и создатся, при этом nextPendingConnection() вовратит указатель на сокет для последнего подключившегося клиента
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #2 : Июнь 14, 2011, 15:51 »

nextPendingConnection() вовратит указатель на сокет для последнего подключившегося клиента
Разве на последнего, а не на первого из необработанных?
Записан
RedDog
Гость
« Ответ #3 : Июнь 14, 2011, 15:54 »

Разве на последнего, а не на первого из необработанных?
Ну имелось ввиду, что сокеты по мере подключения все же будут обрабатываться а не в очередь выстраиваться, поэтому последнего, а предыдущие уже были обработаны.
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #4 : Июнь 14, 2011, 16:02 »

Ну да:
QTcpSocket* ptrClient = ptrServer->nextPendingConnection();
и обрабатываем сигналы получаемые от ptrClient.

А как распознать какой клиент к какому сокету относится или это происходит автоматически?
с помощью  QTcpSocket* pClientSocket = (QTcpSocket*)sender(); Непонимающий типа кто послал сигнал с тем и работаем, а остальные в очередь, если при подключении с ними ничего не происходило.Так?
Записан
RedDog
Гость
« Ответ #5 : Июнь 14, 2011, 16:07 »

ну можно распознавать через адрес:
Код:
QHostAddress QAbstractSocket::peerAddress ()
можно завести ассоциативный массив, где ключом будет некое описание клиента, а значением - указатель на сокет клиента
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #6 : Июнь 14, 2011, 16:10 »

А что значит некое описание клиента??? Улыбающийся Если можно, поподробнее.
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #7 : Июнь 14, 2011, 16:15 »

Можно  вот так: сделать массив указателей на сокет, а ключом будет IP - адрес Непонимающий
Записан
RedDog
Гость
« Ответ #8 : Июнь 14, 2011, 16:34 »

Можно  вот так: сделать массив указателей на сокет, а ключом будет IP - адрес Непонимающий
А что это даст? айпишник можно и из самого сокета в любой момент получить
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #9 : Июнь 14, 2011, 20:40 »

Ну а как тогда быть??? Чтобы сделать массив указателей сокетов с ключом Непонимающий
Записан
Amigo_sa
Гость
« Ответ #10 : Июнь 14, 2011, 21:32 »

Нужно идти от задачи. Если ваш сервер просто раздает какие то одинаковые данные клиентам, то вам смысла нет знать, какой именно клиент к вам подключился. Если клиентам нужна разная информация, то можно придумать разные запросы от клиентов, в которых указывается, что нужно возвращать. Если вам нужно все-таки различать клиенты по адресам, то вы можете, к примеру, завести множество из переменных типа пара(адрес клиента, локальный сокет клиента)
Код:
QSet<QPair<QHostAddress, quint16> > m_clients;
......

QTcpSocket * peerSocket = m_server->nextPendingConnection();
QPair<QHostAddress, quint16> peerData = QPair<QHostAddress, quint16>(peerSocket->peerAddress(), peerSocket->peerPort());
m_clients.insert(peerData);

По количеству элементов в этом множестве вы можете приблизительно оценить, сколько клиентов к вам подключены. Правда, после реконнекта, локальный порт и может быть адрес уже будет другим, даже если эта тот же экземпляр клиентской программы.
В общем, смотря что вам нужно сделать.
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« Ответ #11 : Июнь 16, 2011, 13:52 »

Понял, Спасибо Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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