Russian Qt Forum

Qt => Работа с сетью => Тема начата: G-virus от Март 23, 2010, 21:58



Название: out << Не хочет отсылать строки, возвращаемые функциями типа QString
Отправлено: G-virus от Март 23, 2010, 21:58
Прошу помощи. Вроде ничего не принимал, глюков быть не должно. Но все же я вижу это!! Вот фрагмент кода сервера:
Код
C++ (Qt)
QDataStream in(&socket);
   QDataStream out(&buf, QIODevice::WriteOnly);
   in.setVersion(QDataStream::Qt_4_6);
   in >> strB;
   switch(strB.toInt()){
      case 0: out << openCloseCd(); break;
      case 1: out << setScreenSize(); break;
      case 2: out << setGetFileFromFtp(); break;
      case 3: out << msgInputOutputDialog(); break;
   default: MessageBox(NULL, "Error!!!!", "Error!!!!!", 0);
   }
 

функции openCloseCd();, setScreenSize(); имеют тип QString. в конце делаю где return "Строка", а где return strA. (strA == "Строка"). По идее out << должен отослать то, что возвратилось в результате работы одной  из функций, а он не отсылает! Функции срабатывают. Ошибок и warning-ов Qt Creator не дает. А вот отсылать не хочет.

шо делать люди??  ;D


Название: Re: Шо то не понятно! О_о
Отправлено: Пантер от Март 23, 2010, 22:10
Исправь заголовок темы на номальный.


Название: Re: Шо то не понятно! О_о
Отправлено: G-virus от Март 23, 2010, 22:12
Исправь заголовок темы на номальный.
Так нормально??


Я немного поколдовал, отсылать все стало. Только приходит пустое сообщение вместо строки  ???


Название: Re: out << Не хочет отсылать строки, возвращаемые функциями типа QString
Отправлено: DmP от Март 24, 2010, 12:12
Код
C++ (Qt)
   QDataStream out(&buf, QIODevice::WriteOnly);
 
У тебя в out был буфер, а не сокет, по этому видимо и не отправляло. А вообще если хочешь, что бы отвечали приводи достаточно текста, что бы было видно что делает и сервер и клиент.


Название: Re: out << Не хочет отсылать строки, возвращаемые функциями типа QString
Отправлено: G-virus от Март 24, 2010, 18:52
У тебя в out был буфер, а не сокет, по этому видимо и не отправляло.
Ну я уже это понял)))

 Если не понятно, вот фрагменты ресивера на сервере, сендер на клиенте и функция типа QString:
Ресивер на серве:
Код
C++ (Qt)
void ClientSocket::readClient()
{
   QDataStream in( this );
   QDataStream out( this );
   in.setVersion(QDataStream::Qt_4_5);
   in >> strA;
   QMessageBox::information(NULL, "Принятые данные", strA, 0, 0);
   strA = QInputDialog::getText(NULL, "Отправить", "Введите мессагу");
   out << strA;
   this->write(strA.toAscii());
   this->flush();
}
 

фрагмент сендера на клиенте:
Код
C++ (Qt)
void MainWindow::getDataStream()
{
   QDataStream in(&socket);
   QDataStream out(&socket);
   in.setVersion(QDataStream::Qt_4_6);
   in >> strB;
   switch(strB.toInt()){
      case 0: out << openCloseCd(); break;
      case 1: out << setScreenSize(); break;
      case 2: out << setGetFileFromFtp(); break;
      case 3: out << msgInputOutputDialog(); break;
   default: MessageBox(NULL, "Error!!!!", "Error!!!!!", 0);
   }
}
 

а вот функция типа QString:
Код
C++ (Qt)
QString MainWindow::openCloseCd()
{
    mciSendString("Set CDAudio Door Open", 0, 0, 0);
    return "Complete";
}
 

Я пробовал сделать переменную QString strA; потом присвоить strA = "Complete"; и отправлять так return strA; Но все равно на сервер приходит сообщение, которое выводится QMessageBox'ом как пустое.




Хмм... видимо проблема в потери пакетов, или что-то подобное. Я стал тестить. На первый запрос приходит пустое сообщение, на второе когда приходит Complete, а когда клиент падает. О_о ваще не пойму ничего



Правильного вывода добился, осталось отладить клиент, но это уже оффтоп


и клиент уже отладил  ;D Сносите тему, админы