crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в QTcpSocket - ошибки в работе
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
BRE Дата 24.9.2010, 7:05
 
Цитата(CodeHunter @ 23.9.2010, 13:26) *
Сначала надо отправлять размер данных, а потом считывать этот размер и корректно читать из буфера

Что значит надо? А если протокол не подразумевает отправку размера данных или отправитель вообще не может в начале отправки определить сколько он будет отправлять?
В ручную бить трафик на блоки и добавлять информацию о размере? Для чего увеличивать объем передаваемых данных, если tcp стек это и так делает?
Достаточно корректно обрабатывать поступающие данные.

А отправка размера блока упрощает получение блока, но совершенно не обязательна.
CodeHunter Дата 23.9.2010, 12:26
 
Цитата(fsMark @ 22.7.2008, 10:24) *
Лажа бывает когда буффер не заполнился до конца а ты его читать пытаешься...,



Сначала надо отправлять размер данных, а потом считывать этот размер и корректно читать из буфера
flankerr Дата 23.7.2008, 12:53
  сокеты не блокируемы через сигналы..

привязываю к сигналу readyRead() свой обработчик там проверяю bytesAvailable() если там есть нужное мне число байт то считываю read() если там меньшее число ьбайт тогда выходу из обработчки и жду следующего сигнала.

Через н-ое время (всегдя по разному) вместо валидных данных начинаю считывать лажу.
Т.е предположим мне надо считать два байта, я получаю readyRead() захожу в свой обработчик проверяю bytesAvailable() на наличие этих двух байт, потом делаю read() проверяю что read() вернул мне правельно число прочитаных байт а вот содержание данных - фуфел.

хотя размер "пакета" данных не велик 60-200 байт но общий объём весьма ощутимый.
31512 Дата 23.7.2008, 5:55
 
Цитата(flankerr @ 21.7.2008, 22:50) *

Эта... А ты какой режим используешь? Сокеты бывают блокируюшие и неблокирующие. У меня с сокетами никаких проблем всё работает отлично.
fsMark Дата 22.7.2008, 10:24
  Лажа бывает когда буффер не заполнился до конца а ты его читать пытаешься..., получаются либо левые данные(мусор).. иногда приложение падать может.
Ты должен либо контролировать количество пришедших данных либо отключить буферизцию.
Litkevich Yuriy Дата 21.7.2008, 17:53
  что за лажа-то хоть, опиши подробнее.
flankerr Дата 21.7.2008, 17:50
  Берём обычный recv читаеет всё на ура как надо без сбоёв.
Берём Qt сокет и тут начинаються сбои. Лдано бы потсоянно, а то то нормлаьно то начинает лажу вычитывать...

У ктонить натыкался на грабли в сокете в Qt 4.3 при обработки больших объёмов данных ???
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.4.2024, 4:53