Название: [РЕШЕНО] Ограничение скорости в QTcpSocket Отправлено: AlekseyK от Ноябрь 26, 2010, 17:42 Как-то пробегала хорошая статья (http://doc.trolltech.com/qq/qq17-ratecontrol.html) об ограничении скорости в сокете силами Qt. Однако со времён Qt 4.2 поведение QIODevice изменилось (http://labs.qt.nokia.com/2006/09/11/behavioral-changes-in-qiodevice-in-qt-42/) и пример перестал работать корректно: кушал 100% CPU (это я исправил), не все данные приходят целиком. Вместо него появился Torrent Example в Qt с ограничением скорости. Мне нужен просто сокет с контролем скорости, поэтому я выкинул из класса PeerWireClient всё, что касается торрента, однако программа не заработала вообще. Кто разбирался с этим моментом: можно вас попросить взглянуть на код, пожалуйста,- в чём причина? Код прилагается. Класс RateController работает отлично - проверено, проблема в изменённом PeerWireClient - у меня это класс KTcpSocket.
Название: Re: Ограничение скорости в QTcpSocket Отправлено: AlekseyK от Ноябрь 27, 2010, 19:05 Добавил пару ключевых функций - удалил лишнего, но всё ещё не работает:
Код
Исправленные исходники добавил. Название: Re: Ограничение скорости в QTcpSocket Отправлено: AlekseyK от Ноябрь 29, 2010, 16:48 Кое что понял: в примере Qt были пропущены функции readLine, т.к. в торрент-клиенте они не нужны, добавил в определение класса KTcpSocket (бывший класс PeerWireClient) следующее:
Код И это естественно и понятно т.к. реально данные пересылаются через QTcpSocket socket, для которого KTcpSocket является вроде прокси. Теперь сокет принимает данные корректно, но не работает ограничение скорости, ;) потому как сигнал readyRead() сокета завязан на сигнал readyRead() прокси. Блин, замкнутый круг какой-то. ;D Чего делать??? :) Название: Re: Ограничение скорости в QTcpSocket Отправлено: AlekseyK от Декабрь 02, 2010, 00:06 В общем вопрос решён (не обошлось без помощи автора оригинальной статьи ;)), пока только для QTcpSocket-a, ssl сокет на подходе, я надеюсь. Кому интересно - пишите. Как будет время отпишусь подробнее тут или может на crossplatform.ru.
Название: Re: [РЕШЕНО] Ограничение скорости в QTcpSocket Отправлено: crossly от Декабрь 02, 2010, 00:17 пиши.... будет интересно,...
Название: Re: [РЕШЕНО] Ограничение скорости в QTcpSocket Отправлено: AlekseyK от Декабрь 02, 2010, 19:57 Выложу пока что код, объяснения потом. Для полноценного сокета (если синхронный ввод-вывод нужен) нужно ещё кое-что добавить, но это уже не такая большая проблема. А вот с QSslSocket-ом проблема: не заводится пока зараза, блин: с отправкой данных проблем быть не должно, а вот с получением... Он то размер буфер устанавливает, но похоже не соблюдает: данные все скопом приходят, не середине выскакивает QAbstractSocket::RemoteHostClosedError и данные теряются. Он также сам по себе буферный и данные отправляет в приватный QTcpSocket.
Название: Re: [РЕШЕНО] Ограничение скорости в QTcpSocket Отправлено: AlekseyK от Декабрь 02, 2010, 21:20 Да уж, там похоже с этим куча проблем:
http://bugreports.qt.nokia.com/browse/QTBUG-15065 http://bugreports.qt.nokia.com/browse/QTBUG-6276 http://bugreports.qt.nokia.com/browse/QTBUG-13431 - по идее в 4.7.2 поправят. |