Russian Qt Forum
Март 28, 2024, 11:29
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Работа с сетью
>
Очистка буферов QTcpSocket
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Очистка буферов QTcpSocket (Прочитано 7186 раз)
sergek
Гипер активный житель
Offline
Сообщений: 861
Мы должны приносить пользу людям.
Очистка буферов QTcpSocket
«
:
Сентябрь 04, 2017, 16:41 »
Коллеги,
в QSerialPort есть метод clear() для очистки буферов. А в QTcpSocket есть ли что-нибудь подобное?
Записан
Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Bepec
Гость
Re: Очистка буферов QTcpSocket
«
Ответ #1 :
Сентябрь 04, 2017, 21:11 »
В смысле для очистки? Просто прочитайте данные в никуда.
Записан
sergek
Гипер активный житель
Offline
Сообщений: 861
Мы должны приносить пользу людям.
Re: Очистка буферов QTcpSocket
«
Ответ #2 :
Сентябрь 04, 2017, 21:33 »
Это что касается данных, поступающих из сокета. А буфер данных, передаваемых в сокет, как очистить?
Записан
Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Bepec
Гость
Re: Очистка буферов QTcpSocket
«
Ответ #3 :
Сентябрь 04, 2017, 22:03 »
flush?
Записан
qate
Супер
Offline
Сообщений: 1175
Re: Очистка буферов QTcpSocket
«
Ответ #4 :
Сентябрь 05, 2017, 16:41 »
Цитата: Bepec от Сентябрь 04, 2017, 22:03
flush?
flush выкидывает данные в сеть, но не очищает имеющиеся без передачи
Записан
Bepec
Гость
Re: Очистка буферов QTcpSocket
«
Ответ #5 :
Сентябрь 05, 2017, 16:45 »
Эээ... Вы не путайте удалить все данные и очистить буферы.
Сам смысл "буферов" в сохранении данных. Врядли имеется программист с шизофренией, который одной рукой посылает данные а потом их удаляет.
Записан
sergek
Гипер активный житель
Offline
Сообщений: 861
Мы должны приносить пользу людям.
Re: Очистка буферов QTcpSocket
«
Ответ #6 :
Сентябрь 05, 2017, 18:31 »
Цитата: Bepec от Сентябрь 05, 2017, 16:45
Сам смысл "буферов" в сохранении данных. Врядли имеется программист с шизофренией, который одной рукой посылает данные а потом их удаляет.
Есть! Но шизофрения тут ни при чем, все зависит от задачи. Например, когда реализуется прикладной протокол, то перед началом очередной транзакции, нужно быть уверенным, что не осталось никаких хвостов от предыдущей. Например, в QModbusRtuSerialMasterPrivate таких фрагментов
Код:
m_state = Schedule; // reschedule, even if empty
m_serialPort->clear(QSerialPort::AllDirections);
QTimer::singleShot(m_interFrameDelayMilliseconds, [this]() { processQueue(); });
четыре штуки. Я этот класс перепёр на TCP соединение, вот и ищу замену
Записан
Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Bepec
Гость
Re: Очистка буферов QTcpSocket
«
Ответ #7 :
Сентябрь 05, 2017, 19:57 »
Дык флушьте и читайте. Сделав readAll flush вы гарантируете что у вас обрезков нет. Но, соответственно, вам нужно флагами или как контролировать самому отправку.
Ибо нет смысла очищать буфер, если вы же туда через мс запишите что-либо.
PS флуш очищает буфер, заканчивая пересылку данных, которые ВЫ оправили.
Записан
sergek
Гипер активный житель
Offline
Сообщений: 861
Мы должны приносить пользу людям.
Re: Очистка буферов QTcpSocket
«
Ответ #8 :
Сентябрь 05, 2017, 20:23 »
Цитата: Bepec от Сентябрь 05, 2017, 19:57
Дык флушьте и читайте.
Насчет readAll - все правильно. А flush делать нельзя - этот мусор попрет в устройства, и что в ответ получим - неизвестно.
Записан
Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Bepec
Гость
Re: Очистка буферов QTcpSocket
«
Ответ #9 :
Сентябрь 05, 2017, 20:25 »
Там не мусор.. В буфере отправки лежат пакеты, которые ещё не отправлены в сеть. То, что вы туда write, но ещё не успело отправиться.
И flush вы их принудительно отсылаете.
Т.е. если бы вы просто чистили буфер отправки, то отправилось бы полпакета, а вторую половину вы бы затёрли
и у вас чур чыгыдык наступил бы в канале
Ну или команды потерялись
Записан
Страниц: [
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 сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...