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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Ребят, ткните носом в ошибку плиз  (Прочитано 2591 раз)
G-virus
Гость
« : Апрель 23, 2011, 13:35 »

Привет всем. Я че-то затупил вокруг простейшей проги, хотя раньше все получалось, правда, под виндой.
Простецкое клиентское приложение, получает в параметры ip и порт, коннектится, отсылает "Подключено" и ждет сообщений от сервера.

Вот, собственно, код:

reciever.cpp
Код
C++ (Qt)
#include "reciever.h"
 
reciever::reciever(QObject *parent, QString address, QString _port):
       QObject(parent), ip(address), port(_port.toInt())
{
   connect(&socket, SIGNAL(readyRead()), this, SLOT(readTCP()));
   connect(&socket, SIGNAL(disconnected()), this, SLOT(_disconneted()));
}
 
void reciever::readTCP()
{
   QDataStream in(&socket);
   in.setVersion(QDataStream::Qt_4_7);
   in >> data;
   qDebug() << data.toAscii();
}
 
void reciever::_disconneted()
{
   qDebug("Отключено");
   connecting();
}
 
void reciever::connecting()
{
 qDebug() << "Подключение...";
  while(!socket.waitForConnected(1000))
     socket.connectToHost(ip, port);
 QDataStream out(&socket);
 out << QString("Подключено");
 qDebug() << "\n" << "Подключено к " << ip.toAscii();
 qDebug() << "Ожидается прием сообщений:";
}
 
 

reciever.h
Код
C++ (Qt)
#ifndef RECIEVER_H
#define RECIEVER_H
 
#include <QObject>
#include <QTcpSocket>
 
class reciever : public QObject
{
   Q_OBJECT
public:
   reciever(QObject *parent, QString address, QString _port);
   QTcpSocket socket;
   void connecting();
public slots:
  void readTCP();
  void _disconneted();
private:
   QString ip;
   QString data;
   int port;
};
 
 
#endif // RECIEVER_H
 

main.cpp
Код
C++ (Qt)
#include <QtCore/QCoreApplication>
#include <QTextCodec>
#include "reciever.h"
 
 
int main(int argc, char *argv[])
{
   QTextCodec * myTextCodec = QTextCodec::codecForName("utf8");
   QTextCodec::setCodecForLocale( myTextCodec);
   QTextCodec::setCodecForTr( myTextCodec);
   QTextCodec::setCodecForCStrings( myTextCodec);
        //   argc = 3;
          // argv[1] = "127.0.0.1";
          // argv[2] = "6178";
   QCoreApplication a(argc, argv);
   if(argc < 3)
   {
       qDebug("Запусти с параметрами, мудак");
       return 0;
   }
   else
   {
       reciever r(NULL, QString(argv[1]), QString(argv[2]));
       r.connecting();
   }
   return a.exec();
}
 

Программа не работает, не принимает строк никаких и ничего не отсылает.
Вот вывод приложения:
Код:
g-virus@g-virus-desktop: ./reciever 127.0.0.1 6178
Подключение...

 Подключено к  "127.0.0.1"

Ожидается прием сообщений:
Отключено
Подключение...

 Подключено к  "127.0.0.1"

Ожидается прием сообщений:
Записан
merke
Гость
« Ответ #1 : Апрель 23, 2011, 16:05 »

Код:
 qDebug() << "Подключение...";
  socket.connectToHost(ip, port);
 
  а потом уже
Код:
  while(!socket.waitForConnected(1000))
     
  QDataStream out(&socket);
  out << QString("Подключено");
  qDebug() << "\n" << "Подключено к " << ip.toAscii();
  qDebug() << "Ожидается прием сообщений:";
Записан
G-virus
Гость
« Ответ #2 : Апрель 23, 2011, 19:35 »

А разве не так у меня?  Улыбающийся
Записан
merke
Гость
« Ответ #3 : Апрель 24, 2011, 12:23 »

Так сначала подключайся, а  потом уже жди сигнала удачного соединения, а не наоборот
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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