Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

Nessuna risposta da socket server



  • ciao!

    sto testando le socket in qt, e ho messo su questo codice:

    #include "socketserver.h"
    
    SocketServer::SocketServer(QObject *parent) : QTcpServer(parent) {
    }
    
    void SocketServer::startServer() {
        if(!this->listen(QHostAddress::Any, 1234)) {
            qDebug() << "Impossibile avviare il server";
        } else {
            qDebug() << "Server avviato...";
        }
    }
    
    void SocketServer::incomingConnection(int socketDescriptor) {
        qDebug() << socketDescriptor << " Connessione...";
        MThread *thread = new MThread(socketDescriptor, this);
        connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
        thread->start();
    }
    

    MThread è una classe per la gestione di più thread.
    se volete la posto.

    cmq , quando avvio il programma, in console appare Server avviato...
    ho provato poi ad avviare una connessione tramite telnet:

    telnet> open localhost 1234
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    

    e rimane così.
    non capisco dove sia il problema.



  • @fermatqt said in Nessuna risposta da socket server:

    Connected to localhost.

    è chiaro che il cliente è efficace se presente

    e rimane così.

    e che cosa dovrebbe inviare il server?



  • ciao!

    sostanzialmente mi aspettavo di visualizzare quello che mando in output dal MThread:

    #include "mthread.h"
    
    MThread::MThread(int id, QObject *parent) : QThread(parent) {
        this->socketDescriptor = id;
    }
    
    void MThread::run() {
        qDebug() << socketDescriptor << " - Inizio thread";
        socket = new QTcpSocket();
        if(!socket->setSocketDescriptor(this->socketDescriptor)) {
            emit error(socket->error());
            return;
        }
    
        connect(socket, SIGNAL(readyRead()), this, SLOT(readyRead()),Qt::DirectConnection);
        connect(socket, SIGNAL(disconnected()), this, SLOT(disconnected()),Qt::DirectConnection);
    
        qDebug() << socketDescriptor << " - Connessione client";
    
        exec();
    }
    
    void MThread::readyRead() {
        QByteArray Data = socket->readAll();
    
        qDebug() << socketDescriptor << " Data in: " << Data;
    
        socket->write(Data);
    }
    
    void MThread::disconnected() {
        qDebug() << socketDescriptor << "Disconnesione";
        socket->deleteLater();
        exit(0);
    }
    


  • QThread non e' il thread, e' un contenitore del thread che vive sul thread principale. Gli slot non verranno eseguiti sul thread secondario ma su quello principale. Il mutlithreading qui e' inutile e dannoso, riscrivi il programma in single thread.
    Puoi usare questo esempio come punto di partenza se ti trovi arenato: https://wiki.qt.io/WIP-How_to_create_a_simple_chat_application


Log in to reply