Question

J'essaie de créer un client qui devrait se connecter à un serveur C. Je dois utiliser TCP. J'ai déjà un serveur entièrement fonctionnel, mais je ne peux pas connecter mon client. Je ne veux envoyer aucune donnée au serveur (à ce stade). Je veux juste établir une connexion et ouvrir une nouvelle boîte de dialogue.

Voici le code dans Void Login :: On_pushbutton_clicked (). // bouton-poussoir est mon bouton de connexion

pSocket = new QTcpSocket (this);
connect (pSocket, SIGNAL(readyRead()), SLOT(waitNextStep()));
pSocket->connectToHost(ui->lineEdit->text(), ui->lineEdit_2->text().toInt());
if(pSocket->waitForConnected())
{
    Menu mMenu;
    mMenu.setModal(true);
    mMenu.exec();
}
else
{
    QMessageBox::critical(this,tr("Error"),tr("Error at Connect"));
}

J'ai déjà défini la classe de menu et je sais que c'est fonctionnel depuis que je l'ai testé sans la partie de connexion. La partie extravant IP des lignesDits est également fonctionnelle. Le site est déclaré dans la classe de connexion, en tant que membre privé (Qtcpsocket * PSocket;).

Malheureusement, je suis nouveau à Qt et je ne sais pas vraiment ce que la fonction "WaitNextStep ()" devrait conserver. Je viens de faire un retour 1; Je ne sais pas la fente de la fonction Connect depuis que j'ai remarqué dans de nombreux exemples qu'il y avait des fonctions différentes là-bas.

Si j'exécute le programme, je n'obtiens pas d'erreurs et le programme s'exécute bien. Mais lorsque je touche le bouton de connexion, la boîte de dialogue gèle pendant environ 15 secondes - elle ne répond pas. Après cela, je reçois le message "Erreur au Connect". Toute aide sera très appréciée.

Était-ce utile?

La solution

Malheureusement, je suis nouveau à Qt et je ne sais pas vraiment ce que la fonction "WaitNextStep ()" devrait conserver. Je viens de faire un retour 1; Je ne sais pas la fente de la fonction Connect depuis que j'ai remarqué dans de nombreux exemples qu'il y avait des fonctions différentes là-bas.

Cela dépend fortement de votre cas d'utilisation, mais c'est généralement le gestionnaire des données entrantes tout ce que vous souhaitez faire avec elle, y compris potentiellement que vous ne le stockez pas dans une variable membre pour le moment.

Si j'exécute le programme, je n'obtiens pas d'erreurs et le programme s'exécute bien. Mais lorsque je touche le bouton de connexion, la boîte de dialogue gèle pendant environ 15 secondes - elle ne répond pas. Après cela, je reçois le message "Erreur au Connect". Toute aide sera très appréciée.

C'est parce que if(pSocket->waitForConnected()) est le blocage (I.e Sync) d'utilisation de l'opération QT asynchrone. Ce que je suggère de faire, c'est plutôt se connecter au signal connecté conformément à documentation :

vide qabstractSocket :: connecté () [signal]

Ce signal est émis après ConnectetoHost () a été appelé et une connexion a été établie avec succès.

REMARQUE: Sur certains systèmes d'exploitation, le signal connecté () peut être directement émis à partir de l'appel de ConnectToHost () pour connecter des connexions au localhost.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top