Не подключается QTcpSocket к QTcpServer

Всем привет. Я не то что бы сильно давно в программировании, а тем более плюсах и сетевом коде, но... Пытаюсь сделать клиент-сервер на Qt. Самый простейший. И на самом первом же шаге полный ступор. Создал сервер. вот код: mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTcpServer>
#include <QTcpSocket>
#include <QStringList>
#include <QString>
#include <QDateTime>
#include <QUdpSocket>
#include "server.h"

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;

    QUdpSocket *usocket;

    QStringList List;
public slots:
    void NewString(QString message);
    void NewIncomingConnection();
    void UDPIncoming();
};
#endif // MAINWINDOW_H

server.h

#ifndef SERVER_H
#define SERVER_H

#include <QTcpServer>
#include <QTcpSocket>
#include <QVariant>

class Server : public QTcpServer
{
    Q_OBJECT
public:
    Server();

    QTcpSocket *socket;

    bool isServerListening();
signals:
    void NewString(QString string);
public slots:
    void incomingConnection(qintptr handle);
    void newConnection();

};
#endif // SERVER_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

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

    Server s;
    connect(&s, &QTcpServer::newConnection, this, &MainWindow::NewIncomingConnection);
    s.listen(QHostAddress::Any, 33333);
    connect(&s, &Server::NewString, this, &MainWindow::NewString);

    s.isServerListening();

    usocket = new QUdpSocket;
    usocket->bind(QHostAddress("127.0.0.1"), 33334);
    connect(usocket, &QUdpSocket::readyRead, this, &MainWindow::UDPIncoming);

}

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

void MainWindow::NewString(QString message)
{
    ui->listWidget->blockSignals(true);
    ui->listWidget->clear();

    List.push_front(QTime::currentTime().toString("hh:mm:ss")+" |:| "+message);

    ui->listWidget->addItems(List);
    ui->listWidget->blockSignals(false);
}

void MainWindow::NewIncomingConnection()
{
    qDebug() << "Новое подключение";
}

void MainWindow::UDPIncoming()
{
    qDebug() << "Новое сообщение";
}

server.cpp

#include "server.h"
#include <QNetworkProxy>

Server::Server()
{

}

bool Server::isServerListening()
{
    emit(NewString("Привет"));
    if(this->isListening()) {
        emit(NewString("Я слушаю "+this->serverAddress().toString()+" : "+QVariant(this->serverPort()).toString()));
        return true;
    }
    else {
        emit(NewString("Ошибка : "+this->errorString()));
        return false;
    }
}

void Server::incomingConnection(qintptr handle)
{
    socket = new QTcpSocket;
    socket->setSocketDescriptor(handle);
    qDebug() << "Новое подключение";

    emit(NewString("Новое подключение"));
}

void Server::newConnection()
{
    socket = new QTcpSocket;

    qDebug() << "Новое подключение 2";
}

И при запуске сервера все хорошо. Сервер запускается и слушает порт 33333

Но при попытке подключения клиента сервер находится и все. errorString в QTcpSocket выводит Connection Refused

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTcpServer>
#include <QTcpSocket>
#include <QUdpSocket>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void on_pushButton_clicked();

private:
    Ui::MainWindow *ui;

    QTcpSocket *socket;
    QUdpSocket *usocket;
public slots:
    void HostFound();
    void HostConnected();
    void SocketState();
};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

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

    socket = new QTcpSocket(this);
    connect(socket, &QTcpSocket::hostFound, this, &MainWindow::HostFound);
    connect(socket, &QTcpSocket::connected, this, &MainWindow::HostConnected);
    connect(socket, &QTcpSocket::stateChanged, this, &MainWindow::SocketState);
    qDebug() << socket->state();
}

MainWindow::~MainWindow()
{
    delete ui;


}


void MainWindow::on_pushButton_clicked()
{
    socket->connectToHost("127.0.0.1", 33333);
    qDebug() << socket->state();
}

void MainWindow::HostFound()
{
    qDebug() << "Host Found" << socket->peerName();
}

void MainWindow::HostConnected()
{
    qDebug() << "Host connected";
    qDebug() << socket->state();
}

void MainWindow::SocketState()
{
    qDebug() << socket->state();
    if(socket->errorString() != "Unknown error") {
        qDebug() << socket->errorString();
    }
}

Ответы (1 шт):

Автор решения: DelloMorter

Server s; - сделайте его членом класса. У вас он уничтожается при выходе из MainWindow::MainWindow – Alex F

→ Ссылка