Название: TCP/IP Отправлено: demaker от Июнь 14, 2011, 15:31 Подскажите пожалуйста, можно ли использовать m_ptcpServer->nextPendingConnection()
для связей с несколькими клиентами и как сделать это грамотно? Спасибо! Название: Re: TCP/IP Отправлено: RedDog от Июнь 14, 2011, 15:44 В примерах куча информации
а nextPendingConnection() возвращает указатель на сокет, через который будет идси связь с конкретным клиентом сколько клиентов, столько сокетов и создатся, при этом nextPendingConnection() вовратит указатель на сокет для последнего подключившегося клиента Название: Re: TCP/IP Отправлено: LisandreL от Июнь 14, 2011, 15:51 nextPendingConnection() вовратит указатель на сокет для последнего подключившегося клиента Разве на последнего, а не на первого из необработанных?Название: Re: TCP/IP Отправлено: RedDog от Июнь 14, 2011, 15:54 Разве на последнего, а не на первого из необработанных? Ну имелось ввиду, что сокеты по мере подключения все же будут обрабатываться а не в очередь выстраиваться, поэтому последнего, а предыдущие уже были обработаны.Название: Re: TCP/IP Отправлено: demaker от Июнь 14, 2011, 16:02 Ну да:
QTcpSocket* ptrClient = ptrServer->nextPendingConnection(); и обрабатываем сигналы получаемые от ptrClient. А как распознать какой клиент к какому сокету относится или это происходит автоматически? с помощью QTcpSocket* pClientSocket = (QTcpSocket*)sender(); ??? типа кто послал сигнал с тем и работаем, а остальные в очередь, если при подключении с ними ничего не происходило.Так? Название: Re: TCP/IP Отправлено: RedDog от Июнь 14, 2011, 16:07 ну можно распознавать через адрес:
Код: QHostAddress QAbstractSocket::peerAddress () Название: Re: TCP/IP Отправлено: demaker от Июнь 14, 2011, 16:10 А что значит некое описание клиента??? :) Если можно, поподробнее.
Название: Re: TCP/IP Отправлено: demaker от Июнь 14, 2011, 16:15 Можно вот так: сделать массив указателей на сокет, а ключом будет IP - адрес ???
Название: Re: TCP/IP Отправлено: RedDog от Июнь 14, 2011, 16:34 Можно вот так: сделать массив указателей на сокет, а ключом будет IP - адрес ??? А что это даст? айпишник можно и из самого сокета в любой момент получитьНазвание: Re: TCP/IP Отправлено: demaker от Июнь 14, 2011, 20:40 Ну а как тогда быть??? Чтобы сделать массив указателей сокетов с ключом ???
Название: Re: TCP/IP Отправлено: Amigo_sa от Июнь 14, 2011, 21:32 Нужно идти от задачи. Если ваш сервер просто раздает какие то одинаковые данные клиентам, то вам смысла нет знать, какой именно клиент к вам подключился. Если клиентам нужна разная информация, то можно придумать разные запросы от клиентов, в которых указывается, что нужно возвращать. Если вам нужно все-таки различать клиенты по адресам, то вы можете, к примеру, завести множество из переменных типа пара(адрес клиента, локальный сокет клиента)
Код: QSet<QPair<QHostAddress, quint16> > m_clients; По количеству элементов в этом множестве вы можете приблизительно оценить, сколько клиентов к вам подключены. Правда, после реконнекта, локальный порт и может быть адрес уже будет другим, даже если эта тот же экземпляр клиентской программы. В общем, смотря что вам нужно сделать. Название: Re: TCP/IP Отправлено: demaker от Июнь 16, 2011, 13:52 Понял, Спасибо :)
|