<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Servidor TCP que recibe datos antes de responder]]></title><description><![CDATA[<p dir="auto">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.</p>
<p dir="auto">El cliente es un arduino Mega con el siguiente código para conectarse al servidor:</p>
<pre><code>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 &lt;&lt; "Conectando a servidor..." &lt;&lt; endl;
    if (millis() &lt; (tiempoAnterior + 500)) { //Retardo entre reconexiones
      anteriormente_conectado = false;
      switch (estado_conexion) {
        case 1:
          Serial &lt;&lt; "Conexión establecida correctamente. Servidor:" &lt;&lt; servidor_remoto &lt;&lt; puerto_remoto &lt;&lt; endl;
          anteriormente_conectado = true;
          //Envio trama de estado
          Serial &lt;&lt; "Envio trama de estado de Arduino" &lt;&lt; endl;
          char trama[25];
          datosEnviar.toCharArray(trama, datosEnviar.length()); //Paso String a char[]
          cliente.write(trama, 25);
          break;
        case -1:
          Serial &lt;&lt; "Ha pasado el tiempo de espera sin que se establezca la conexión. Servidor:" &lt;&lt; servidor_remoto &lt;&lt; ":" &lt;&lt; puerto_remoto &lt;&lt; endl;
          error[6] = 0; //Error de red
          break;
        case -2:
          Serial &lt;&lt; "No se ha encontrado el servidor o no responde correctamente. Servidor:" &lt;&lt; servidor_remoto &lt;&lt; ":" &lt;&lt; puerto_remoto &lt;&lt; endl;
          error[6] = 0; //Error de red
          break;
        case -3:
          Serial &lt;&lt; "La conexión se ha interrumpido antes de establecerse completamente. Servidor:" &lt;&lt; servidor_remoto &lt;&lt; ":" &lt;&lt; puerto_remoto &lt;&lt; endl;
          error[6] = 0; //Error de red
          break;
        case -4:
          Serial &lt;&lt; "La respuesta del servidor es incorrecta. Servidor:" &lt;&lt; servidor_remoto &lt;&lt; ":" &lt;&lt; puerto_remoto &lt;&lt; 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.
  }
}

</code></pre>
<p dir="auto">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.</p>
<p dir="auto">El codigo del servidor:</p>
<pre><code>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(&amp;block, QIODevice::WriteOnly);
    out.setVersion(QDataStream::Qt_4_0);
    out &lt;&lt; (quint16)0;
    out &lt;&lt; fortunes.at(qrand() % fortunes.size());
    out.device()-&gt;seek(0);
    out &lt;&lt; (quint16)(block.size() - sizeof(quint16));
    
    
    QTcpSocket *clientConnection = tcpServer-&gt;nextPendingConnection();
    connect(clientConnection, SIGNAL(disconnected()),
            clientConnection, SLOT(deleteLater()));
    clientConnection-&gt;write(block);
    //clientConnection-&gt;disconnectFromHost(); //Comentado porque es el cliente el que cierra la conexion tras recibir caracter de fin de trama
}
</code></pre>
<p dir="auto">Se puede hacer lo que quiero o lo estoy planteando mal?</p>
]]></description><link>https://forum.qt.io/topic/78729/servidor-tcp-que-recibe-datos-antes-de-responder</link><generator>RSS for Node</generator><lastBuildDate>Mon, 20 Apr 2026 02:01:51 GMT</lastBuildDate><atom:link href="https://forum.qt.io/topic/78729.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 28 Apr 2017 15:02:58 GMT</pubDate><ttl>60</ttl></channel></rss>