Título: Problemas con la recepción usando sockets Publicado por: AncientDragon en 24 Junio 2014, 16:25 pm Buenas tardes a todos.
Actualmente estoy desarrollando una clase en C++ que usa sockets con la finalidad de que me sirva para testear cabeceras HTTP. El problema es que creía que estaba bien implementada pero con su uso me he dado cuenta de un problema que no sé como resolver. La situación es que intento recibir solamente la cabecera (HEAD) de un determinado servidor y todo funciona correctamente. Sin embargo, si intento realizar esta misma petición más de una vez, parece que la respuesta del servidor queda solapada por las respuestas anteriores. Para entender mejor el problema adjunto el código que uso así como la salida obtenida. TCPSocket.h Código: #ifndef _TCPSOCKET_H_ TCPSocket.cpp Código: #include <iostream> Main.cpp Código: #include <iostream> La salida obtenida es la siguiente: HTTP REQUEST ------------ Conectando con www.ubuntu.com Conectando con 91.189.90.58 HTTP/1.1 200 OK Date: Mon, 23 Jun 2014 10:26:31 GMT Server: Apache/2.2.22 (Ubuntu) Cache-Control: public, max-age=300 Vary: Accept-Encoding Content-Type: text/html; charset=utf-8 Age: 26 Content-Length: 17555 X-Cache: HIT from avocado.canonical.com X-Cache-Lookup: HIT from avocado.canonical.com:80 Via: 1.1 avocado.canonical.com:80 (squid/2.7.STABLE7) Via: 1.1 www.ubuntu.com HTTP/1.1 200 OK Date: Mon, 23 Jun 2014 10:26:31 GMT Server: Apache/2.2.22 (Ubuntu) Cache-Control: public, max-age=300 Vary: Accept-Encoding Content-Type: text/html; charset=utf-8 Age: 26 Content-Length: 17555 X-Cache: HIT from avocado.canonical.com X-Cache-Lookup: HIT from avocado.canonical.com:80 Via: 1.1 avocado.canonical.com:80 (squid/2.7.STABLE7) Via: 1.1 www.ubuntu.com : 1.1 www.ubuntu.com HTTP/1.1 200 OK Date: Mon, 23 Jun 2014 10:26:31 GMT Server: Apache/2.2.22 (Ubuntu) Cache-Control: public, max-age=300 Vary: Accept-Encoding Content-Type: text/html; charset=utf-8 Age: 26 Content-Length: 17555 X-Cache: HIT from avocado.canonical.com X-Cache-Lookup: HIT from avocado.canonical.com:80 Via: 1.1 avocado.canonical.com:80 (squid/2.7.STABLE7) Via: 1.1 www.ubuntu.com : 1.1 www.ubuntu.com : 1.1 www.ubuntu.com HTTP/1.1 200 OK Date: Mon, 23 Jun 2014 10:26:31 GMT Server: Apache/2.2.22 (Ubuntu) Cache-Control: public, max-age=300 Vary: Accept-Encoding Content-Type: text/html; charset=utf-8 Age: 26 Content-Length: 17555 X-Cache: HIT from avocado.canonical.com X-Cache-Lookup: HIT from avocado.canonical.com:80 Via: 1.1 avocado.canonical.com:80 (squid/2.7.STABLE7) Via: 1.1 www.ubuntu.com : 1.1 www.ubuntu.com : 1.1 www.ubuntu.com : 1.1 www.ubuntu.com HTTP/1.1 200 OK Date: Mon, 23 Jun 2014 10:26:31 GMT Server: Apache/2.2.22 (Ubuntu) Cache-Control: public, max-age=300 Vary: Accept-Encoding Content-Type: text/html; charset=utf-8 Age: 26 Content-Length: 17555 X-Cache: HIT from avocado.canonical.com X-Cache-Lookup: HIT from avocado.canonical.com:80 Via: 1.1 avocado.canonical.com:80 (squid/2.7.STABLE7) Via: 1.1 www.ubuntu.com : 1.1 www.ubuntu.com : 1.1 www.ubuntu.com : 1.1 www.ubuntu.com : 1.1 www.ubuntu.com Como se ve, todas las respuestas deberían ser idénticas, pero se ven alteradas por las respuestas previas. Creo que el problema se puede encontrar en el método "Read" de la clase aunque no estoy seguro porque no veo ningún error. Gracias de antemano y un saludo. Título: Re: Problemas con la recepción usando sockets Publicado por: eferion en 24 Junio 2014, 16:47 pm Lo que tú estás haciendo ahora mismo podría equipararse a 5 personas intentando hablar todas a la vez a través de la misma línea.
Para resolver el problema yo te propongo 2 opciones: * Usar 5 instancias diferentes de TCPSocket. Cada una creará un socket diferente y no se interferirán entre sí. * Usar solo un TCPSocket, en este caso la clase debería impedir nuevas conexiones hasta no haber cerrado la conexión actual. |