[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_OBJECTpublic:
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.