Russian Qt Forum
Ноябрь 22, 2024, 19:36 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проверка на переполнение приемного буфера  (Прочитано 8966 раз)
YvenTitan
Самовар
**
Offline Offline

Сообщений: 174


Просмотр профиля
« : Январь 13, 2017, 10:31 »

Доброе утро
У меня такая сложность. Я пересылаю много данных и часто с серверной части на клиентскую. Минут через 10 работы программы появляются признаки того, что часть пакетов теряются. Клиентская часть написана с помощью класса, наследованного от QTcpSocket.
Можно как-то проверить, было переполнение приемного буфера клиентской части или нет?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Январь 13, 2017, 10:46 »

> Клиентская часть написана с помощью класса, наследованного от QTcpSocket
Извиняюсь, нахрена?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
YvenTitan
Самовар
**
Offline Offline

Сообщений: 174


Просмотр профиля
« Ответ #2 : Январь 13, 2017, 10:47 »

А как правильнее?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Январь 13, 2017, 10:52 »

Не наследоваться.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
YvenTitan
Самовар
**
Offline Offline

Сообщений: 174


Просмотр профиля
« Ответ #4 : Январь 13, 2017, 10:54 »

Что это даст?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Январь 13, 2017, 11:01 »

Это даст нормальную архитектуру. А на счет переполнения я не понял, объясни подробнее.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
YvenTitan
Самовар
**
Offline Offline

Сообщений: 174


Просмотр профиля
« Ответ #6 : Январь 13, 2017, 11:10 »

Как я понимаю, есть буфер, из которого вычитываются пришедшие данные с помощью функции socket->readAll(). Если слишком медленно вычитывать данные, то этот буфер переполнится и пришедшие данные начнут теряться. Возможно, я не так себе все представляю.
Вопрос в том, можно ли как-то проверить, переполнился этот буфер или нет?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #7 : Январь 13, 2017, 11:19 »

socket->bytesAvailable () покажет сколько данных в буфере. Но пакеты не будут теряться, буфер просто будет расти и расти.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
YvenTitan
Самовар
**
Offline Offline

Сообщений: 174


Просмотр профиля
« Ответ #8 : Январь 13, 2017, 11:26 »

Он может вырасти на десятки мегабайт? Я смотрю с помощью диспетчера задач, и он показывает, что приложение не "ворует" память в больших количествах
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #9 : Январь 13, 2017, 11:28 »

Может больше, чем на десятки. Скорее всего, у тебя проблема где-то в другом месте. Если бы привел код, можно было бы точнее сказать.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
cuntroll
Гость
« Ответ #10 : Январь 25, 2017, 09:34 »

на десятки, но не до бесконечности, т.к. SO_RCVBUF таки ограничен максимальным значением int'a  Смеющийся
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #11 : Январь 25, 2017, 09:39 »

на десятки, но не до бесконечности, т.к. SO_RCVBUF таки ограничен максимальным значением int'a  Смеющийся
У меня как-то память текла гигами, долго не мог понять, в чем проблема. А проблема оказалась в том, что я запускал QProcess и читал его stdout, а на stderr клал болт - в итоге у меня в stderr все копилось и копилось... Решилось все  закрытием неиспользуемых каналов.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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