El programa de socket Python se está ejecutando para siempre

1

Intenté ejecutar el siguiente programa en mi terminal Mac.

import socket
mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mysock.connect(('www.py4inf.com', 80))
mysock.send('GET http://www.py4inf.com/code/romeo.txt HTTP/1.0\n\n')

while True:
    data = mysock.recv(512)
    if ( len(data) < 1 ) :
        break
    print data;
mysock.close()

Pero no imprime nada y toma para siempre. Probé alguna plataforma en línea para ejecutar y recibí un mensaje de error

  

"" "Rastreo (última llamada más reciente): archivo" main.py ", línea 6, en    mysock.connect (('www.py4inf.com', 80)) Archivo   "/usr/lib64/python2.7/socket.py", línea 228, en retorno de metanfetamina   getattr (self._sock, nombre) (* args) socket.error: [Errno 110] Conexión   agotado "" "

Pongo la declaración de impresión después de Verdadero: y antes de la línea "data=" e imprime la declaración allí y luego toma para siempre.

El entorno de My Python es

"Python 2.7.10 (default, Jul 14 2015, 19:46:27)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)] on darwin"

Y en otra computadora, funciona.

¿Alguien puede identificar un problema?

    
pregunta Amrit Joshi 28.02.2016 - 21:28

2 respuestas

2

Su programa se ejecuta bien en mi MAC OS Mavericks (aka 10.9.5) con Python 2.7.5 Imprime:

HTTP/1.1 200 OK
Date: Sun, 27 Mar 2016 07:42:22 GMT
Server: Apache
Last-Modified: Fri, 04 Dec 2015 19:05:04 GMT
ETag: "e103c2f4-a7-526172f5b5d89"
Accept-Ranges: bytes
Content-Length: 167
Cache-Control: max-age=604800, public
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: origin, x-requested-with, content-type
Access-Control-Allow-Methods: GET
Connection: close
Content-Type: text/plain

But soft what light through yonder window breaks
It is the east and Juliet is the sun
Arise fai
r sun and kill the envious moon
Who is already sick and pale with grief

Supongo que su programa se atascó cuando no había respuesta disponible dentro del tiempo de espera del protocolo TCP (ya sea que el servidor no responde o el enlace falla). Si desea evitar ese caso, puede colocar la declaración "recv" en un hilo separado y romper después de un tiempo de espera. Encontré mucha ayuda para esto en esta página: eli.thegreenplace. net / 2011/05/18 / code-sample-socket-client-thread-in-python /

Espero que esto ayude.

    
respondido por el Patrick Bussi 27.03.2016 - 10:00
0

En la sección donde dice:

mysock.connect(('www.py4inf.com', 80))

Es posible que haya una conexión a Internet lenta, por lo que el hecho de que demore tanto.

Además, los sitios web de emulación de python inteligentes no le permitirán ejecutar sockets en sus emuladores, ya que puede falsificar su IP y eso puede causar problemas de seguridad cibernética.     

respondido por el Hazim Sager 29.02.2016 - 15:48

Lea otras preguntas en las etiquetas