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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Хелп  (Прочитано 4200 раз)
Max Payne
Гость
« : Июнь 04, 2010, 15:58 »

Отправляю с клиента на сервер :
Код:
void Client::send_rec()
 {
     QString f;
     f = "3334";

     QByteArray block;
     QDataStream send (block);
     send << (quint16)0;
     send << (quint8)'S' ;
     send << f;
     send.device()->seek(0);
     send << (quint16)(block.size() - sizeof(quint16));
     tcpSocket->write(block);

 }

и пытаюсь прочитать на сервере
Код:
 ClientSocket *socket  = new ClientSocket (this);
     socket->setSocketDescriptor(socketDescriptor);
     QByteArray re;
     QDataStream in (&re,QIODevice::ReadOnly);
     in.setVersion(5);
 
     if (blockSize ==0)
     {
         if (tcpSocket.bytesAvailable() < sizeof(quint16))
             return;
            in >> blockSize;
     }
     if (tcpSocket.bytesAvailable() < blockSize)
         return;
     quint8 requestType;
     QString ret;
     in >> requestType;

     if (requestType == 'S')
     {
         in >>ret;
     }

где :
ClientSocket::ClientSocket (QObject *parent, const char *name) : QTcpSocket (parent)
 {
     connect(this,SIGNAL(readyRead()),this,SLOT(readClient()));
     connect(this,SIGNAL(disconnected()),this,SLOT(deleteLater()));
     connect(this,SIGNAL(readChannelFinished()),this,SLOT(deleteLater()));
     blockSize = 0;
 }

не могу понять где ошибка... подскажите... Я понимаю что натупил с размерами блока но не могу понять как исправить ...
Подскажите куда копать...
« Последнее редактирование: Июнь 04, 2010, 20:52 от Max Payne » Записан
crossly
Гость
« Ответ #1 : Июнь 04, 2010, 16:05 »

что за манера у вас не пойму.... а где вопрос то??
Записан
Max Payne
Гость
« Ответ #2 : Июнь 04, 2010, 17:37 »

что за манера у вас не пойму.... а где вопрос то??

не приходят данные с криента на сервер...
Размер blockSize = 0
Записан
garryHotDog
Гость
« Ответ #3 : Июнь 04, 2010, 18:19 »

Цитировать
tcpSocket->write(block);
поставь после этого flush() и попробуй в клиенте waitForReadyRead() - должно заработать!
Записан
Max Payne
Гость
« Ответ #4 : Июнь 04, 2010, 20:15 »

Пасиб попробую...
Записан
Max Payne
Гость
« Ответ #5 : Июнь 04, 2010, 20:51 »

Все равно даные не доходят , срабатывает этот ретурн

if (tcpSocket.bytesAvailable() < blockSize)
         return;

 и  не работает connect(this,SIGNAL(readyRead()),this,SLOT(readClient()));

« Последнее редактирование: Июнь 05, 2010, 00:14 от Max Payne » Записан
hackoff
Гость
« Ответ #6 : Июнь 05, 2010, 04:38 »

Прочитай предпоследний пост в теме http://www.prog.org.ru/topic_12269_15.html
Записан
Max Payne
Гость
« Ответ #7 : Июнь 06, 2010, 13:51 »

Читал, смотрел , розчехлялся... не помогло
читаю на сервере:
Код:
void Server_Cast::incomingConnection(int socketDescriptor)
 {

    //QMessageBox::information(0,"",re);
    /*ClientSocket *socket  = new ClientSocket (this);
    if (!socket->setSocketDescriptor(socketDescriptor)) {
        emit error(socket->error());
        return;
    }*/


     QTcpSocket tcpSocket;
     if (!tcpSocket.setSocketDescriptor(socketDescriptor)) {
         emit error(tcpSocket.error());
         return;
     }

     QDataStream in(&tcpSocket);
     in.setVersion(QDataStream::Qt_4_0);
qDebug () <<"Size 1"<<blockSize;
     if (blockSize == 0) {
         if (tcpSocket.bytesAvailable() < (int)sizeof(quint16))
             return;
        qDebug () <<"Size"<<blockSize;
         in >> blockSize;
     }
     qDebug () <<"Size 2"<<blockSize<<" df "<<tcpSocket.bytesAvailable();
     if (tcpSocket.bytesAvailable() < blockSize) {return;}
qDebug () <<"Size 3"<<blockSize;
     QString nextFortune;
     in >> nextFortune;


читаю,  дебаг пишет
Size 1 65196
Size 2 65196  df  0
Size 3 65196

Пишу из клиента
Код:
QString fortune, ty;
     fortune = "as";
     ty = "cv";
     Client_cast_Thread *thread = new Client_cast_Thread(fortune, this);
     connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
     thread->start();

где  Server_cast_Thread
Код:
 QByteArray block;
     QDataStream out(&block, QIODevice::WriteOnly);
     out.setVersion(QDataStream::Qt_4_0);
     out << (quint16)0;
     out << text;
     out.device()->seek(0);
     out << (quint16)(block.size() - sizeof(quint16));
        qDebug() << blockSize ;
     tcpSocket.write(block);
     //tcpSocket.flush();
     tcpSocket.waitForReadyRead();
дебаг видает размер 61453  block вроде правильно отравляется..
запись вызываю с tcpSocket SIGNAL(connected())
чтение при входящем соединении..

обьсните где ошибка... Получается даные отсылаю, а получить не могу даже размер блока..

« Последнее редактирование: Июнь 06, 2010, 14:39 от Max Payne » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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