Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. [solved]QAbstractSocket::UnknownSocketError
Forum Updated to NodeBB v4.3 + New Features

[solved]QAbstractSocket::UnknownSocketError

Scheduled Pinned Locked Moved General and Desktop
5 Posts 2 Posters 1.8k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • A Offline
    A Offline
    asma11
    wrote on last edited by
    #1

    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.

    1 Reply Last reply
    0
    • A Offline
      A Offline
      asma11
      wrote on last edited by
      #2

      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);
      }
      @

      1 Reply Last reply
      0
      • A Offline
        A Offline
        asma11
        wrote on last edited by
        #3

        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
        @

        1 Reply Last reply
        0
        • A Offline
          A Offline
          asma11
          wrote on last edited by
          #4

          does any one have a preposition?

          1 Reply Last reply
          0
          • IamSumitI Offline
            IamSumitI Offline
            IamSumit
            wrote on last edited by
            #5

            Hii..

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

            Be Cute

            1 Reply Last reply
            0

            • Login

            • Login or register to search.
            • First post
              Last post
            0
            • Categories
            • Recent
            • Tags
            • Popular
            • Users
            • Groups
            • Search
            • Get Qt Extensions
            • Unsolved