Название: $РЕШЕНО$ "Слипание" кадров Отправлено: Inhibitor от Октябрь 28, 2015, 19:21 Добрый день.
Помогите, пожалуйста, разъяснить один вопрос. Ситуация примерно такова: приложение через QTcpSocket подключается к девайсу, после чего выкачивает с девайса информацию в виде файла. Проблема заключается в следующем: девайс выдает информацию стройными красивыми кадрами по 1460 байт каждый (мониторил через Wireshark), а сокет (монитроил через метод bytesAvailable()) выдает информацию то по 1460 байт, то по 2920 байт (1460 * 2). Подскажите, возможно ли избавиться от такого "слипанияв" кадров на стороне сокета? Название: Re: "Слипание" кадров Отправлено: kuzulis от Октябрь 28, 2015, 20:03 можно но не нужно. см. в сторону Алгоритм Нейгла (https://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9D%D0%B5%D0%B9%D0%B3%D0%BB%D0%B0)
UPD: А хотя, если смотреть на QTcpSocket - то это маловероятно. Может быть поиграться с setsockopt(TCP_NODELAY) Название: Re: "Слипание" кадров Отправлено: Old от Октябрь 28, 2015, 20:26 Подскажите, возможно ли избавиться от такого "слипанияв" кадров на стороне сокета? Вычитывайте быстрее данные из сокета. Если вычитывать еще медленней, то будет собираться и по 3 x 1460 и по 4. :)Название: Re: "Слипание" кадров Отправлено: Dimas от Октябрь 29, 2015, 08:53 Мне помогло от слипания кадров отключение в сокете QTcpSocket алгоритмов Нейгла.
Код: socket.socketOption(QAbstractSocket::LowDelayOption); Название: Re: "Слипание" кадров Отправлено: qate от Октябрь 29, 2015, 09:04 1460 это MTU в локалке
никто и не гарантирует размер принятых данных в разных конфигурациях сетей программа должна быть готова обработать любой размер пакета данных Название: Re: "Слипание" кадров Отправлено: Inhibitor от Октябрь 29, 2015, 10:06 Dimas, kuzulis, спасибо! :)
Действительно отключение Нейгла помогло. |