Russian Qt Forum

Qt => Работа с сетью => Тема начата: G-virus от Апрель 23, 2011, 13:35



Название: Ребят, ткните носом в ошибку плиз
Отправлено: 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"

Ожидается прием сообщений:


Название: Re: Ребят, ткните носом в ошибку плиз
Отправлено: merke от Апрель 23, 2011, 16:05
Код:
 qDebug() << "Подключение...";
  socket.connectToHost(ip, port);
 
  а потом уже
Код:
  while(!socket.waitForConnected(1000))
     
  QDataStream out(&socket);
  out << QString("Подключено");
  qDebug() << "\n" << "Подключено к " << ip.toAscii();
  qDebug() << "Ожидается прием сообщений:";


Название: Re: Ребят, ткните носом в ошибку плиз
Отправлено: G-virus от Апрель 23, 2011, 19:35
А разве не так у меня?  :)


Название: Re: Ребят, ткните носом в ошибку плиз
Отправлено: merke от Апрель 24, 2011, 12:23
Так сначала подключайся, а  потом уже жди сигнала удачного соединения, а не наоборот