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

[solved]QAbstractSocket::UnknownSocketError



  • Hello !
    I have a problem related with socket in my chat application my code seems correct ,but when I run the program the same error apears always "QAbstractSocket::UnknownSocketError" I didn't understand the reason of this problem and the debugguer didn't shows any error .
    If someone have any idea about this problem please help me to solve it ,thanx.



  • this is the code :
    client.cpp:
    @#include "client.h"
    #include "ui_client.h"

    client::client(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::client)
    {
    ui->setupUi(this);
    setWindowTitle(tr("Chat"));
    QPixmap pix("C:/Users/asma/Desktop/mychat/client/pic.png");
    ui->label_4->setPixmap(pix);
    QPixmap pic("C:/Users/asma/Desktop/mychat/client/chatt.png");
    ui->label_6->setPixmap(pic);

    socket = new QTcpSocket(this);
    connect(socket, SIGNAL(readyRead()), this,SLOT(donneesRecues()));
    connect(socket, SIGNAL(connected()), this, SLOT(connecte()));
    connect(socket, SIGNAL(disconnected()), this,SLOT(deconnecte()));
    connect(socket, SIGNAL(error(QAbstractSocket::SocketError)),this, SLOT(erreurSocket(QAbstractSocket::SocketError)));
    tailleMessage = 0;
    

    }

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

    void client::on_boutonConnexion_clicked()
    {
    // On annonce sur la fenêtre qu'on est en train de se connecter
    ui-> listeMessages->append(tr("<em>Tentative de connexion en cours...</em>"));
    ui-> boutonConnexion->setEnabled(false);
    /if (socket->state() != QAbstractSocket::UnconnectedState)
    {
    socket->abort();
    socket->waitForDisconnected(500);
    }
    /
    socket->abort(); // On désactive les connexions précédentes s'il y en a
    socket->connectToHost(ui->serveurIP->text(),ui->serveurPort->value());

    // On se connecte au serveur demandé
    

    }

    void client::on_boutonEnvoyer_clicked()
    {
    QByteArray paquet;
    QDataStream out(&paquet, QIODevice::WriteOnly);
    // On prépare le paquet à envoyer
    QString messageAEnvoyer = tr("<strong>") + ui->pseudo->text() +tr("</strong> : ") + ui->message->text();
    out << (quint16) 0;
    out << messageAEnvoyer;
    out.device()->seek(0);
    out << (quint16) (paquet.size() - sizeof(quint16));
    socket->write(paquet); // On envoie le paquet
    ui-> message->clear(); // On vide la zone d'écriture du message
    ui->message->setFocus(); // Et on remet le curseur à l'intérieur
    }

    void client::on_message_returnPressed()
    {
    on_boutonEnvoyer_clicked();
    }
    void client::donneesRecues()
    {
    /* Même principe que lorsque le serveur reçoit un paquet :
    On essaie de récupérer la taille du message
    Une fois qu'on l'a, on attend d'avoir reçu le message entier (en se
    basant sur la taille annoncée tailleMessage)
    */
    QDataStream in(socket);
    if (tailleMessage == 0)
    {
    if (socket->bytesAvailable() < (int)sizeof(quint16))
    return;
    in >> tailleMessage;
    }
    if (socket->bytesAvailable() < tailleMessage)
    return;
    // Si on arrive jusqu'à cette ligne, on peut récupérer lemessage entier
    QString messageRecu;
    in >> messageRecu;
    // On affiche le message sur la zone de Chat
    ui->listeMessages->append(messageRecu);
    // On remet la taille du message à 0 pour pouvoir recevoir de futurs messages
    tailleMessage = 0;
    }
    // Ce slot est appelé lorsque la connexion au serveur a réussi
    void client::connecte()
    {
    ui->listeMessages->append(tr("<em>Connexion réussie !</em>"));
    boutonConnexion->setEnabled(true);
    }
    // Ce slot est appelé lorsqu'on est déconnecté du serveur
    void client::deconnecte()
    {
    ui->listeMessages->append(tr("<em>Déconnecté du serveur</em>"));
    }
    // Ce slot est appelé lorsqu'il y a une erreur
    void client::erreurSocket(QAbstractSocket::SocketError erreur)
    {
    switch(erreur) // On affiche un message différent selon l'erreur qu'on nous indique
    {
    case QAbstractSocket::HostNotFoundError:
    ui->listeMessages->append(tr("<em>ERREUR : le serveur n'a pas pu être trouvé. Vérifiez l'IP et le port.</em>"));
    break;
    case QAbstractSocket::ConnectionRefusedError:
    ui->listeMessages->append(tr("<em>ERREUR : le serveur a refusé la connexion. Vérifiez si le programme "serveur" a bien été lancé. Vérifiez aussi l'IP et le port.</em>"));
    break;
    case QAbstractSocket::RemoteHostClosedError:
    ui->listeMessages->append(tr("<em>ERREUR : le serveur a coupé la connexion.</em>"));
    break;
    default:
    ui->listeMessages->append(tr("<em>ERREUR : ") + socket->errorString() + tr("</em>"));
    qDebug()<<socket->error();
    }
    ui->boutonConnexion->setEnabled(true);
    }
    @



  • client.h:

    @#ifndef CLIENT_H
    #define CLIENT_H

    #include <QDialog>
    #include<QtNetwork>
    #include<QtWidgets>
    #include"ui_client.h"
    namespace Ui {
    class client;
    }

    class client : public QDialog,private Ui::client
    {
    Q_OBJECT

    public:
    explicit client(QWidget *parent = 0);
    ~client();

    private slots:
    void on_boutonConnexion_clicked();

    void on_boutonEnvoyer_clicked();
    
    void on_message_returnPressed();
    void donneesRecues();
    void connecte();
    void deconnecte();
    void erreurSocket(QAbstractSocket::SocketError erreur);
    

    private:
    Ui::client *ui;
    QTcpSocket *socket; // Représente le serveur
    quint16 tailleMessage;
    };

    #endif // CLIENT_H
    @



  • does any one have a preposition?



  • Hii..

    I would suggest to go through the Qt Doc Examples on Network module.


Log in to reply