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 :

Identification de QTcpSocket


Sujet :

Réseau

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    257
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juin 2010
    Messages : 257
    Par défaut Identification de QTcpSocket
    Bonjour,

    J'utilise un QTcpServer et des QTcpSocket, et vu que j'ai plusieurs sockets, je voudrais les identifier car selon la socket je réalise une action différente.
    Donc j'essaye d'écrire dans la socket après m'être connecté au server mais lorsque j'effectue des tests sur ce que je réceptionne cela ne fonctionne pas!
    J'ai essayé d'afficher le QByteArray qui est retourné par socket->read() mais il n'y a rien dedans ( "" ) !
    J'ai aussi essayé de le caster mais sans résultats.

    Si vous voulez plus d'informations, ou du code dites le moi.
    Ou des propositions différentes sur le sujet n'hésitez pas!

    Je vous remercie d'avance

  2. #2
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Bonjour

    Pour du code, tu peux regarder les exemples d'utilisation de QTcpSocket et QTcpServer dans la doc de Qt

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    257
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juin 2010
    Messages : 257
    Par défaut
    Même avec l'exemple Qt cela ne fonctionne pas! je pense que j'écris trop tôt dans la socket ! Pouvez vous me donnez votre avis ?!

    Voici mon côté client à partir duquel j'envoi
    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
     
    void ClientConfig::requestNewConnexion()
     {
    	 socket->abort();
         socket->connectToHost("127.0.0.1", 50885);
    	 if (socket->waitForConnected(2000000))		
    	 {
    		qDebug("Connected!");
    		sendData();
    	 }
    	 else
    		qDebug() << "socket error : " <<socket->errorString();
    		return;
     }
     
     void ClientConfig::sendData()
    {
         QByteArray block;
    	 QString str = "1";
         QDataStream out(&block, QIODevice::WriteOnly);
         out.setVersion(QDataStream::Qt_4_6);
         out << (quint16)0;
         out << str;
         out.device()->seek(0);
         out << (quint16)(block.size() - sizeof(quint16));
     
         socket->write(block);
         if(socket->flush())
    		qDebug("envoyé!");
    	 else
    		qDebug("erreur!");
     }
    et voici mon côté server qui récupère l'infos pour l'identification

    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
     
    void LocalServer::NewConnectionOnServer()
    {
        if(m_server->hasPendingConnections() == true)
    	{
    		if(cpt == 0)
    		{
    			client1 = new QTcpSocket;
    			client1 = m_server->nextPendingConnection();
    			qDebug() << "Nouvelle connexion sur le serveur 1";
    			cpt += 1;
    			VerifSocket(client1);
    			if(!m_server->waitForNewConnection(20000))
    			{
    				return;
    			}
    		}
             }
    }
     
    void LocalServer::VerifSocket(QTcpSocket* socketTest)
    {
    	 blockSize = 0;
     
    	 QDataStream in(socketTest);
         in.setVersion(QDataStream::Qt_4_6);
     
         if (blockSize == 0) {
             if (socketTest->bytesAvailable() < (int)sizeof(quint16))
                 return;
             in >> blockSize;
         }
     
         QString str;
         in >> str;
     
    	qDebug() << str;
     
    	if(str == "0")
    	{
    		if(socketTest == client1)
    		{
    		connect(socketTest,SIGNAL(readyRead()),this,SLOT(ReadOK1()));
    		connect(MessagingSystemSerial::getInstance(),SIGNAL(ConfigReceived()),this,SLOT(SendDataToClient1()));
    		}
            }
    }
    Je vous remercie d'avance !

  4. #4
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 63
    Par défaut
    Salut,

    Après la création de ta socket lors de la demande de connexion, tu as simplement à stocker ton client dans une liste.
    Bien évidement ce sera une QList<QTcpSocket*>
    Avec ceci, ton serveur aura en mémoire tous les clients avec qui il correspond.

    à +

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    257
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juin 2010
    Messages : 257
    Par défaut
    Salut,

    Je suis d'accord avec toi mais en fait j'ai trois exe différent et comment je sais si le client1 correspond à l'exe1 ou 2 ou 3 ?

    car imaginons que l'ordre de connexion ne soit pas respecté nous aurons des problèmes pour la suite. Sinon si je respecte l'ordre ta méthode me parait simple et efficace

    Tu vois un peu ce que je veux ?

  6. #6
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 63
    Par défaut
    Tu peux aussi identifier tes clients avec un cast lorsqu'un signal parvient à ton serveur pour savoir qui lui parle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QTcpSocket *Socket = qobject_cast<QTcpSocket *>(sender());
    Avec ça tu peux même afficher l'adresse IP de ton client avec la fonction peerAdress().

    Il y a pas mal d'exemples sur les communication QTcpSocket et QTcpServer sur le net ou même sur dvp.net

    Bon courage.

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

Discussions similaires

  1. [LG]Probleme sur l'identification de typage
    Par axelmeunier dans le forum Langage
    Réponses: 10
    Dernier message: 19/01/2004, 13h41
  2. Identification par ip
    Par Dante dans le forum Développement
    Réponses: 9
    Dernier message: 12/01/2004, 12h20
  3. probleme identification et mot de passe root
    Par freums dans le forum Débuter
    Réponses: 5
    Dernier message: 19/09/2003, 17h09
  4. [servlet][identification][url]
    Par welty dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 20/08/2003, 09h10
  5. identification lettre (pb accent)
    Par scorbo dans le forum C
    Réponses: 5
    Dernier message: 14/12/2002, 02h59

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