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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top