QT client - Connetti al server C
Domanda
Sto cercando di creare un client che dovrebbe connettersi a un server C. Devo usare TCP. Ho già un server che è completamente funzionale, ma non riesco a collegare il mio client. Non voglio inviare dati al server (a questo punto). Voglio solo stabilire una connessione e aprire una nuova finestra di dialogo.
Ecco il codice in Void Login :: on_pushbutton_clecked () slot (). // Pushbuton è il mio pulsante di accesso
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"));
}
.
Ho già definito la classe dei menu e so che è funzionale da quando l'ho testato senza la parte di connessione. Anche la parte IP recuperatrice dalle lineeedit è funzionale. Il PSocket è dichiarato nella classe di accesso, come membro privato (QTCPSocket * PSocket;).
Sfortunatamente sono nuovo da qt e non so davvero cosa la funzione "waitnextstep ()" dovrebbe contaminare. Ho appena fatto un ritorno 1; Non sono sicuro dello slot nella funzione Connect da quando ho notato in molti esempi che c'erano diverse funzioni lì.
Se eseguo il programma non ottengo errori e il programma esegue solo bene. Ma quando premo il pulsante di accesso, la finestra di dialogo si blocca per ~ 15 secondi - non risponde. Dopodiché, ottengo il messaggio "Errore nel collegamento". Qualsiasi aiuto sarà molto apprezzato.
Soluzione
.Sfortunatamente sono nuovo da qt e non so davvero cosa la funzione "waitnextstep ()" dovrebbe contaminare. Ho appena fatto un ritorno 1; Non sono sicuro dello slot nella funzione Connect da quando ho notato in molti esempi che c'erano diverse funzioni lì.
Dipende altamente dal tuo caso di utilizzo, ma di solito è il conduttore dei dati in arrivo qualsiasi cosa desideri fare con esso, potenzialmente includendo che si è appena memorizzato in una variabile membro per il momento.
.Se eseguo il programma non ottengo errori e il programma esegue solo bene. Ma quando premo il pulsante di accesso, la finestra di dialogo si blocca per ~ 15 secondi - non risponde. Dopodiché, ottengo il messaggio "Errore nel collegamento". Qualsiasi aiuto sarà molto apprezzato.
È perché if(pSocket->waitForConnected())
è l'utilizzo di blocco (I.e. sincronizzazione) dell'operazione Qt asincrona. Quello che suggerirei di fare invece è connettersi al segnale collegato come da Documentazione :
.Void QabStactSocket :: connesso () [segnale]
Questo segnale è emesso dopo che ConnecttoHost () è stato chiamato e una connessione è stata stabilita con successo.
Nota: su alcuni sistemi operativi il segnale collegato () può essere emesso direttamente dalla chiamata ConnectoHost () per le connessioni al LocalHost.