Servidor TCP que recibe datos antes de responder
Unsolved
Spanish
-
Hola, he programado un servidor TCP a partir del ejemplo de FortuneServer al que el cliente envía datos al inicio de la conexión.
El cliente es un arduino Mega con el siguiente código para conectarse al servidor:
void conectar_ethernet() { //Conecta al servidor if (!cliente.connected()) { //Si no se ha conectado al servidor estado_conexion = cliente.connect(servidor_remoto, puerto_remoto); // Conexión a servidor unsigned long tiempoAnterior = millis(); Serial << "Conectando a servidor..." << endl; if (millis() < (tiempoAnterior + 500)) { //Retardo entre reconexiones anteriormente_conectado = false; switch (estado_conexion) { case 1: Serial << "Conexión establecida correctamente. Servidor:" << servidor_remoto << puerto_remoto << endl; anteriormente_conectado = true; //Envio trama de estado Serial << "Envio trama de estado de Arduino" << endl; char trama[25]; datosEnviar.toCharArray(trama, datosEnviar.length()); //Paso String a char[] cliente.write(trama, 25); break; case -1: Serial << "Ha pasado el tiempo de espera sin que se establezca la conexión. Servidor:" << servidor_remoto << ":" << puerto_remoto << endl; error[6] = 0; //Error de red break; case -2: Serial << "No se ha encontrado el servidor o no responde correctamente. Servidor:" << servidor_remoto << ":" << puerto_remoto << endl; error[6] = 0; //Error de red break; case -3: Serial << "La conexión se ha interrumpido antes de establecerse completamente. Servidor:" << servidor_remoto << ":" << puerto_remoto << endl; error[6] = 0; //Error de red break; case -4: Serial << "La respuesta del servidor es incorrecta. Servidor:" << servidor_remoto << ":" << puerto_remoto << endl; error[6] = 0; //Error de red break; } //FIN Switch } //FIN IF retardo entre conexiones tiempoAnterior = millis(); } else { //Si se ha conectado al servidor leo_servidor(); //Leo un byte mientras este no sea "z", en ese caso desconecto. } }
El servidor me responde correctamente y recojo los datos en Arduino pero no veo la manera de recoger los datos que envía al inicio el cliente.
El codigo del servidor:
connect(tcpServer, SIGNAL(newConnection()), this, SLOT(envioTCP())); void MainWindow::envioTCP(){ //Se ejecuta al haber un cliente conectado, envia fortuna QByteArray block; //Array de Bytes que contiene trama para enviar al cliente QDataStream out(&block, QIODevice::WriteOnly); out.setVersion(QDataStream::Qt_4_0); out << (quint16)0; out << fortunes.at(qrand() % fortunes.size()); out.device()->seek(0); out << (quint16)(block.size() - sizeof(quint16)); QTcpSocket *clientConnection = tcpServer->nextPendingConnection(); connect(clientConnection, SIGNAL(disconnected()), clientConnection, SLOT(deleteLater())); clientConnection->write(block); //clientConnection->disconnectFromHost(); //Comentado porque es el cliente el que cierra la conexion tras recibir caracter de fin de trama }
Se puede hacer lo que quiero o lo estoy planteando mal?