[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
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.