Название: Размер отправленных и принятых байт разный Отправлено: CJ1 от Июнь 16, 2012, 16:11 Люди, из за чего размеры отправленных и принятых байт может быть разный????
Клиент отправляет 9876 , а сервер принимает 8191 Почему так???? Название: Re: Размер отправленных и принятых байт разный Отправлено: V1KT0P от Июнь 16, 2012, 16:21 Люди, из за чего размеры отправленных и принятых байт может быть разный???? На сколько я знаю телепатов здесь нету. Так что советую хотя бы минимальные куски кода привести.Клиент отправляет 9876 , а сервер принимает 8191 Почему так???? Название: Re: Размер отправленных и принятых байт разный Отправлено: CJ1 от Июнь 16, 2012, 16:25 Вот код отправки
Цитировать QByteArray block; QDataStream out(&block,QIODevice::ReadWrite); out.setVersion(QDataStream::Qt_4_7); out << qint8('Y'); out <<quint8('A'); qint32 x,y; x =qint32(ui->tableWidget->rowCount()-2); y = qint32(ui->tableWidget->columnCount()-1); out << x << y; for(int row=2; row< ui->tableWidget->rowCount(); row++){ for(int column = 1; column<ui->tableWidget->columnCount(); column++){ out << ui->tableWidget->item(row,0)->text(); out << ui->tableWidget->item(0,column)->text(); out << ui->tableWidget->item(row,column)->text(); if (column < 5){ out << qint8('1'); } else{ out << qint8('2'); } } } int w = _sock->write(block); // QMessageBox::information(0,"",QString::number(w)); Вот код приема Цитировать QDataStream in(clientSocket); in.setVersion(QDataStream::Qt_4_7); QMessageBox::information(0,"",QString::number(clientSocket->size())); Если я отправляю байты, до 8191, то все ок если выше, он тупо принимает 8191 Название: Re: Размер отправленных и принятых байт разный Отправлено: kambala от Июнь 16, 2012, 16:35 наверное 8 кб – это лимит для одного куска данных
Название: Re: Размер отправленных и принятых байт разный Отправлено: CJ1 от Июнь 16, 2012, 16:40 Ха, а если я Ставлю еще оди месагбок то все работает!
Код: QDataStream in(clientSocket); Название: Re: Размер отправленных и принятых байт разный Отправлено: CJ1 от Июнь 16, 2012, 16:42 И показывает, ровно то количество которое и надо!
Название: Re: Размер отправленных и принятых байт разный Отправлено: V1KT0P от Июнь 16, 2012, 16:46 Ха, а если я Ставлю еще оди месагбок то все работает! Давай уточним: ты ведь понимаешь что данные приходят не все сразу а по кускам?Код: QDataStream in(clientSocket); Название: Re: Размер отправленных и принятых байт разный Отправлено: CJ1 от Июнь 16, 2012, 16:54 Понимаю! И он сам должен стоять и ждать пока данные придет все!
Еще помогает это Код: QApplication::processEvents(QEventLoop::AllEvents, 30000); Название: Re: Размер отправленных и принятых байт разный Отправлено: V1KT0P от Июнь 16, 2012, 17:03 Понимаю! И он сам должен стоять и ждать пока данные придет все! Госпади... Есть два варианта получения данных:Еще помогает это Код: QApplication::processEvents(QEventLoop::AllEvents, 30000); 1) Если размер пакета фиксированный, то ждешь(или кладешь в буфер) пока размер не станет равен или больше нужного. Тогда берешь первый кусок и обрабатываешь его. 2) Если размер пакета не фиксированный, то ждешь пока не прийдет заголовок, из заголовка читаешь размер. И ждешь(или кладешь в буфер) пока размер не станет равен или больше нужного. Тогда берешь нужный кусок и обрабатываешь его. Все банально. На сколько я понимаю ты даже не ждешь пока придут все данные, а сразу по первому куску пытаешь обработать. Название: Re: Размер отправленных и принятых байт разный Отправлено: CJ1 от Июнь 16, 2012, 17:08 Этот вариант я делал, с самого начало, там какието косяки были, но щас попробую снова, но не факт что проканает.
Этот вариант, конечно везде описан... Название: Re: Размер отправленных и принятых байт разный Отправлено: CJ1 от Июнь 17, 2012, 11:34 Спасибо V1KT0P, так и сделал, ты правильно сказал.....
Да, я брал первый же кусок, и работал с ним. |