IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau Discussion :

Utilisation basique de QTcpSocket [Débuter]


Sujet :

Réseau

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2019
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Décembre 2019
    Messages : 31
    Par défaut Utilisation basique de QTcpSocket
    Bonjour,

    Depuis quelque jours, je me suis mis à programmer avec Qt et j'arrive à la partie concernant l'utilisation de QTcpSocket et QTcpServer. En utilisant les exemples trouvés sur la toile j'arrive à personnaliser certain programme basic.
    Cependant beaucoup de chose m’échappe comme dans l'exemple que je vous soumet. Ma démarche est de comprendre pas à pas comment trouver un serveur , afficher l’état de la connexion à chaque étape. En un 2° temps communiquer
    avec le serveur (Le serveur et le client sont le même poste de travail Windows 10 64 bits).
    Voici mes fichiers :

    1- Fichier header : MainWindow.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
     
    #include <QPushButton>
    #include <QMainWindow>
    #include <QTcpSocket>
     
    namespace Ui {
    class MainWindow;
    }
     
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
     
    public:
        explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();
     
    public slots:
        void onReadyRead();
        void RechercheServeur();
     
    private:
        Ui::MainWindow *ui;
        QTcpSocket  SocketClient;
        QPushButton *BtnQuitter;
     
    };
    #endif // MAINWINDOW_H
    2- Fichier constructeur : MainWindow.cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    #include "MainWindow.h"
    #include "ui_mainwindow.h"
     
    #include <QDebug>
    #include <QHostAddress>
     
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow),
        SocketClient(this)
    {
        ui->setupUi(this);
     
        BtnQuitter = new QPushButton;
        QObject::connect(ui->BtnQuitter,SIGNAL(clicked()),this, SLOT(quit));
     
        QString IPServeur;
        IPServeur = ui->TxtServeurIP->text();
        int IPPort = ui->SpinPort->value();
        // SocketClient.connectToHost("127.0.0.1", IPPort);
        SocketClient.connectToHost(IPServeur, IPPort);
     
        QObject::connect(ui->BtnConnecte,SIGNAL(clicked()),this, SLOT(RechercheServeur()));
        //connect(&_socket, SIGNAL(readyRead()), this, SLOT(onReadyRead()));
    }
     
    MainWindow::~MainWindow()
    {
        delete ui;
    }
     
    void MainWindow::RechercheServeur()
    {
    ui->textEdit->append("1-Recherche connection au serveur....");
    if (SocketClient.ConnectedState == 3) // Etat connecté du socket
        {
            ui->textEdit->append("2- Connection Réussie au seveur : " + SocketClient.peerAddress().toString());
            return;
        }
    else
        {
            ui->textEdit->append("3-Connection terminée.....");
        }
    }
     
    void MainWindow::OnReadyRead()
    {
     
    }
    3- Fichier Main : Main.cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    include "MainWindow.h"
    #include <QApplication>
     
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        MainWindow w;
        w.show();
     
        return a.exec();
    }
    Quelque soit la configuration (Existence ou pas d'adresse IP, de port, .. même reponse ' connexion réussie')
    Je peux récupérer le nom, l'adresse, le port de connexion que si je code l'adresse IP en dur, sion vide
    Je voudrais comprendre ce qui cloche dans mon code.
    Merci pour votre aide.
    Bonne journée.
    A.MAHALLA

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Citation Envoyé par Alidalger Voir le message
    Quelque soit la configuration (Existence ou pas d'adresse IP, de port, .. même reponse ' connexion réussie')
    Ton problème vient de cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (SocketClient.ConnectedState == 3)
    ConnectedState est une constante de l'énumération QAbstractSocket::SocketState qui comme tu peux voir est égale à 3. Ta condition est donc toujours vraie quel que soit l'état réel de ta connexion.
    Il te faut utiliser à la place la fonction membre qui te retourne cet état : .state(), et justement la comparer à cette constante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (SocketClient.state() == QAbstractSocket::ConnectedState)
    À noter que la ligne BtnQuitter = new QPushButton; (et donc également ton membre) ne sert strictement à rien. Le bouton que tu as ajouté à l'aide du designer est créé avec l'appel à ui->setupUi(this), et s'accède via ui->BtnQuitter comme tu le fais correctement pour la connexion qui suit.

    Ensuite ces lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        QString IPServeur;
        IPServeur = ui->TxtServeurIP->text();
        int IPPort = ui->SpinPort->value();
        // SocketClient.connectToHost("127.0.0.1", IPPort);
        SocketClient.connectToHost(IPServeur, IPPort);
    ne devraient pas se situer dans le constructeur. En effet celui-ci est exécuté une seule fois juste avant l'apparition de l'interface. Il est donc trop tôt pour aller chercher les valeurs de ces champs.
    Tu ne dois le faire qu'à l'appui sur le bouton de connexion, c'est à dire dans ton slot RechercheServeur().

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2019
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Décembre 2019
    Messages : 31
    Par défaut
    Bonjour,

    Merci pour ton aide et tes conseils. J'ai pu suivre l'évolution de la connexion étape par étape. Je passe à la 2° phase.

    Merci encore et bonne journée.

    A.MAHALLA

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Utilisation basique du TChart
    Par coxycross dans le forum C++Builder
    Réponses: 4
    Dernier message: 04/06/2012, 15h05
  2. Utilisation basique de dreamweaver
    Par Philp974 dans le forum Dreamweaver
    Réponses: 4
    Dernier message: 22/07/2009, 21h35
  3. [WebServices][WSDL] Utilisation (basique) de la Google API
    Par Rom_1 dans le forum Services Web
    Réponses: 5
    Dernier message: 07/07/2009, 22h55
  4. [OCI] Utilisation basique
    Par Mayhem555 dans le forum Interfaces de programmation
    Réponses: 18
    Dernier message: 25/06/2008, 21h56
  5. Utilisation basique de AJAX.
    Par tomagold dans le forum JSF
    Réponses: 3
    Dernier message: 13/12/2007, 11h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo