Russian Qt Forum

Qt => Работа с сетью => Тема начата: CJ1 от Июнь 16, 2012, 16:11



Название: Размер отправленных и принятых байт разный
Отправлено: 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);
        in.setVersion(QDataStream::Qt_4_7);
        QMessageBox::information(0,"",QString::number(clientSocket->size()));
 QMessageBox::information(0,"",QString::number(clientSocket->size()));


Название: Re: Размер отправленных и принятых байт разный
Отправлено: CJ1 от Июнь 16, 2012, 16:42
И показывает, ровно то количество которое и надо!


Название: Re: Размер отправленных и принятых байт разный
Отправлено: V1KT0P от Июнь 16, 2012, 16:46
Ха, а если я Ставлю еще оди месагбок то все работает!
Код:
     QDataStream in(clientSocket);
        in.setVersion(QDataStream::Qt_4_7);
        QMessageBox::information(0,"",QString::number(clientSocket->size()));
 QMessageBox::information(0,"",QString::number(clientSocket->size()));
Давай уточним: ты ведь понимаешь что данные приходят не все сразу а по кускам?


Название: Re: Размер отправленных и принятых байт разный
Отправлено: CJ1 от Июнь 16, 2012, 16:54
Понимаю! И он сам должен стоять и ждать пока данные придет все!
Еще помогает это
Код:
QApplication::processEvents(QEventLoop::AllEvents, 30000);
QDataStream in(clientSocket);
        in.setVersion(QDataStream::Qt_4_7);
        QMessageBox::information(0,"",QString::number(clientSocket->size()));
 QMessageBox::information(0,"",QString::number(clientSocket->size()));


Название: Re: Размер отправленных и принятых байт разный
Отправлено: V1KT0P от Июнь 16, 2012, 17:03
Понимаю! И он сам должен стоять и ждать пока данные придет все!
Еще помогает это
Код:
QApplication::processEvents(QEventLoop::AllEvents, 30000);
QDataStream in(clientSocket);
        in.setVersion(QDataStream::Qt_4_7);
        QMessageBox::information(0,"",QString::number(clientSocket->size()));
 QMessageBox::information(0,"",QString::number(clientSocket->size()));
Госпади... Есть два варианта получения данных:
1) Если размер пакета фиксированный, то ждешь(или кладешь в буфер) пока размер не станет равен или больше нужного. Тогда берешь первый кусок и обрабатываешь его.
2) Если размер пакета не фиксированный, то ждешь пока не прийдет заголовок, из заголовка читаешь размер. И ждешь(или кладешь в буфер) пока размер не станет равен или больше нужного. Тогда берешь нужный кусок и обрабатываешь его.
Все банально. На сколько я понимаю ты даже не ждешь пока придут все данные, а сразу по первому куску пытаешь обработать.


Название: Re: Размер отправленных и принятых байт разный
Отправлено: CJ1 от Июнь 16, 2012, 17:08
Этот вариант я делал, с самого начало, там какието косяки были, но щас попробую снова, но не факт что проканает.

Этот вариант, конечно везде описан...


Название: Re: Размер отправленных и принятых байт разный
Отправлено: CJ1 от Июнь 17, 2012, 11:34
Спасибо V1KT0P, так и сделал, ты правильно сказал.....
Да, я брал первый же кусок, и работал с ним.