Pregunta

Estoy tratando de crear un cliente que debe conectarse a un servidor C. Debo usar TCP. Ya tengo un servidor que es completamente funcional, pero no puedo conectar mi cliente. No quiero enviar ningún dato al servidor (en este punto). Solo quiero establecer una conexión y abrir un nuevo cuadro de diálogo.

Aquí está el código en el inicio de sesión de Void :: on_pushbutton_clicked () ranura. // Pushbuton es mi botón de inicio de sesión

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"));
}

Ya definí la clase de menú y sé que es funcional desde que lo probé sin la parte de conexión. La parte IP Fetching de los lineedits también es funcional. El PSOCKET se declara en la clase de inicio de sesión, como miembro privado (QTCPSCHOQUES * PSOCHO;).

Desafortunadamente Soy nuevo en QT y no sé realmente cuál es la función 'WaitNextStep ()' debe contestarse. Acabo de hacer un retorno 1; No estoy seguro de la ranura en la función Conectar desde que noté en muchos ejemplos que hubo diferentes funciones allí.

Si ejecuto el programa no recibo errores y el programa se ejecuta bien. Pero cuando llegué al botón de inicio de sesión, el cuadro de diálogo se congela por ~ 15 segundos, no responde. Después de eso, obtengo el mensaje 'Error en Conectar'. Cualquier ayuda será muy apreciada.

¿Fue útil?

Solución

Desafortunadamente Soy nuevo en QT y no sé realmente cuál es la función 'WaitNextStep ()' debe contestarse. Acabo de hacer un retorno 1; No estoy seguro de la ranura en la función Conectar desde que noté en muchos ejemplos que hubo diferentes funciones allí.

Depende en gran medida de su caso de uso, pero generalmente es el manejador de los datos entrantes, lo que desee hacer con él, potencialmente, incluyendo que lo guarde en una variable miembro por el momento.

Si ejecuto el programa no recibo errores y el programa se ejecuta bien. Pero cuando llegué al botón de inicio de sesión, el cuadro de diálogo se congela por ~ 15 segundos, no responde. Después de eso, obtengo el mensaje 'Error en Conectar'. Cualquier ayuda será muy apreciada.

Es porque if(pSocket->waitForConnected()) es el uso de bloqueo (es decir, sincronización) de la operación QT asíncrona. Lo que sugeriría hacer es conectarse a la señal conectada según Documentación :

Void Qabstractsocket :: conectada () [señal]

Esta señal se emite después de que ConnecttoHost () se ha llamado y se ha establecido una conexión.

NOTA: En algunos sistemas operativos, la señal conectada () se puede emitir directamente desde la llamada ConnecttoHost () para las conexiones al localHOST.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top