Russian Qt Forum
Сентябрь 21, 2017, 08:07 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Очистка буферов QTcpSocket  (Прочитано 358 раз)
sergek
Бывалый
*****
Offline Offline

Сообщений: 482


Мы должны приносить пользу людям!


Просмотр профиля
« : Сентябрь 04, 2017, 16:41 »

Коллеги,
в QSerialPort есть метод clear() для очистки буферов. А в QTcpSocket есть ли что-нибудь подобное?
Записан

Qt 5.9.1 Qt Creator 4.3.1
Win7, Win10, Ubuntu 14.04
Bepec
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 7557


W7 x64, Qt SDK 4.7.2, Руки v1.5


Просмотр профиля
« Ответ #1 : Сентябрь 04, 2017, 21:11 »

В смысле для очистки? Просто прочитайте данные в никуда.
Записан

"Мастер простых решений" Ɋt

чОрный список: Spark
sergek
Бывалый
*****
Offline Offline

Сообщений: 482


Мы должны приносить пользу людям!


Просмотр профиля
« Ответ #2 : Сентябрь 04, 2017, 21:33 »

Это что касается данных, поступающих из сокета. А буфер данных, передаваемых в сокет, как очистить?
Записан

Qt 5.9.1 Qt Creator 4.3.1
Win7, Win10, Ubuntu 14.04
Bepec
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 7557


W7 x64, Qt SDK 4.7.2, Руки v1.5


Просмотр профиля
« Ответ #3 : Сентябрь 04, 2017, 22:03 »

flush?
Записан

"Мастер простых решений" Ɋt

чОрный список: Spark
qate
Супер активный житель
*****
Offline Offline

Сообщений: 716


Просмотр профиля
« Ответ #4 : Сентябрь 05, 2017, 16:41 »

flush?

flush выкидывает данные в сеть, но не очищает имеющиеся без передачи
Записан
Bepec
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 7557


W7 x64, Qt SDK 4.7.2, Руки v1.5


Просмотр профиля
« Ответ #5 : Сентябрь 05, 2017, 16:45 »

Эээ... Вы не путайте удалить все данные и очистить буферы.
Сам смысл "буферов" в сохранении данных. Врядли имеется программист с шизофренией, который одной рукой посылает данные а потом их удаляет.
Записан

"Мастер простых решений" Ɋt

чОрный список: Spark
sergek
Бывалый
*****
Offline Offline

Сообщений: 482


Мы должны приносить пользу людям!


Просмотр профиля
« Ответ #6 : Сентябрь 05, 2017, 18:31 »

Сам смысл "буферов" в сохранении данных. Врядли имеется программист с шизофренией, который одной рукой посылает данные а потом их удаляет.
Есть! Но шизофрения тут ни при чем, все зависит от задачи. Например, когда реализуется прикладной протокол, то перед началом очередной транзакции, нужно быть уверенным, что не осталось никаких хвостов от предыдущей. Например, в QModbusRtuSerialMasterPrivate таких фрагментов
Код:
            m_state = Schedule; // reschedule, even if empty
            m_serialPort->clear(QSerialPort::AllDirections);
            QTimer::singleShot(m_interFrameDelayMilliseconds, [this]() { processQueue(); });
четыре штуки. Я этот класс перепёр на TCP соединение, вот и ищу замену Подмигивающий
Записан

Qt 5.9.1 Qt Creator 4.3.1
Win7, Win10, Ubuntu 14.04
Bepec
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 7557


W7 x64, Qt SDK 4.7.2, Руки v1.5


Просмотр профиля
« Ответ #7 : Сентябрь 05, 2017, 19:57 »

Дык флушьте и читайте. Сделав readAll flush вы гарантируете что у вас обрезков нет. Но, соответственно, вам нужно флагами или как контролировать самому отправку.

Ибо нет смысла очищать буфер, если вы же туда через мс запишите что-либо.

PS флуш очищает буфер, заканчивая пересылку данных, которые ВЫ оправили.
Записан

"Мастер простых решений" Ɋt

чОрный список: Spark
sergek
Бывалый
*****
Offline Offline

Сообщений: 482


Мы должны приносить пользу людям!


Просмотр профиля
« Ответ #8 : Сентябрь 05, 2017, 20:23 »

Дык флушьте и читайте.
Насчет readAll - все правильно. А flush делать нельзя - этот мусор попрет в устройства, и что в ответ получим - неизвестно.
Записан

Qt 5.9.1 Qt Creator 4.3.1
Win7, Win10, Ubuntu 14.04
Bepec
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 7557


W7 x64, Qt SDK 4.7.2, Руки v1.5


Просмотр профиля
« Ответ #9 : Сентябрь 05, 2017, 20:25 »

Там не мусор.. В буфере отправки лежат пакеты, которые ещё не отправлены в сеть. То, что вы туда write, но ещё не успело отправиться.
И flush вы их принудительно отсылаете.
Т.е. если бы вы просто чистили буфер отправки, то отправилось бы полпакета, а вторую половину вы бы затёрли Веселый и у вас чур чыгыдык наступил бы в канале Веселый Ну или команды потерялись
Записан

"Мастер простых решений" Ɋt

чОрный список: Spark
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

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