Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Qt tcpSocket readyRead - не реагирует...  (Прочитано 2193 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн nextdrift

  • Автор темы
  • Любитель
  • *
  • Сообщений: 60
    • Просмотр профиля
Qt tcpSocket readyRead - не реагирует...
« : 25 Мая 2013, 14:21:18 »
Что-то провозился я с реализацией сервер-клиента на Qt... Не могу найти ошибку... Такое чувство, что сигнал не срабатывает. В инете не нашёл решения проблемы, может не то искал...

Вот мой код с сервера (сокращённый)

.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QtNetwork>
#include <QTextCodec>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT
   
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
   
private:
    Ui::MainWindow *ui;
    QTcpServer *tcpServer;
    qint16 nextBlockSize;
    void sendToClient(QTcpSocket *socket, const QString& str);


private slots:
    void serverStart();

public slots:
    virtual void newConnection();
            void readClient();
};

#endif // MAINWINDOW_H



.cpp (упрощённый)
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    tcpServer = new QTcpServer(this);

}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::readClient()
{
    // тут код не выполняется вообще. Сколько пытаюсь отправить сообщения, всегда тишина.
    // wiresharp показывает, что пакеты отправляются, но вот ток почему-то не обрабатывает код на их поступление...
}

void MainWindow::newConnection()
{
    // обрабатываеются соединения
    QTcpSocket* clientSocket = tcpServer->nextPendingConnection();
    connect(clientSocket, SIGNAL(disconnected()),
            clientSocket, SLOT(deleteLater())
           );

    //проблемный коннект...
    connect(clientSocket, SIGNAL(readyRead()),
            this,          SLOT(readClient())
           );

    sendToClient(clientSocket, "Server Response: Connected!");
    ui->textEdit->append("подключён клиент");
}

void MainWindow::serverStart()
{
   //работает, сервер стартует
   //сигнал - порт работает корректно
   connect(tcpServer, SIGNAL(newConnection()), this, SLOT(newConnection()) );
}

void MainWindow::sendToClient(QTcpSocket* socket, const QString& str)
{
    // этот код работает (в telnet отправляются сообщения из этого блока)
}


может где законнектил неправильно?

Пользователь решил продолжить мысль 25 Мая 2013, 23:27:49:
нашёл проблему :) Как и предпологалось, не в том месте законнектил сигнал...

У меня сокет динамичный всегда, данные из input'ов берутся. Сделал на стороне клиента так :) connet сразу после определения сокета

void ClientWindow::slotSendToServer()
{
    QString host = ui->inputAdress->text();
    qint16 port = ui->inputPort->text().toInt();
   
    tcpSocket->disconnect();
    tcpSocket->connectToHost(host, port);
   
    connect(tcpSocket, SIGNAL(readyRead()), SLOT(slotReadyRead()));

    QTextStream out(tcpSocket);

    out << ui->inputMess->text();

}


ну и у сервера таже проблема :)  :)
« Последнее редактирование: 25 Мая 2013, 23:27:49 от nextdrift »

 

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