socket real libreria funciones español con comandos python sockets

real - Prueba de conexión de socket en Python



socket python 3 español (3)

Parece que no captas la excepción que quieres alcanzar :)

si el s es un objeto socket.socket() , entonces la forma correcta de llamar a .connect sería:

import socket s = socket.socket() address = ''127.0.0.1'' port = 80 # port number is a number, not string try: s.connect((address, port)) # originally, it was # except Exception, e: # but this syntax is not supported anymore. except Exception as e: print("something''s wrong with %s:%d. Exception is %s" % (address, port, e)) finally: s.close()

Siempre trata de ver qué tipo de excepción es lo que estás atrapando en un ciclo try-except.

Puede verificar qué tipos de excepciones en un módulo de socket representan qué tipo de errores (tiempo de espera, incapacidad para resolver direcciones, etc.) y hacer una declaración de except separada para cada uno de ellos - de esta manera podrá reaccionar de manera diferente para un tipo diferente de problemas

Esta pregunta se ampliará en: Mejor manera de abrir un socket en Python
Al abrir un socket, ¿cómo puedo probar para ver si se ha establecido y que no ha excedido el tiempo de espera, o que generalmente falla?

Editar: Intenté esto:

try: s.connect((address, ''80'')) except: alert(''failed'' + address, ''down'')

pero se llama a la función de alerta incluso cuando esa conexión debería haber funcionado.


Puede usar la función connect_ex . No arroja una excepción. En lugar de eso, devuelve un valor entero de estilo C (denominado errno en C):

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) result = s.connect_ex((host, port)) s.close() if result: print "problem with socket!" else: print "everything it''s ok!"


Realmente deberías publicar:

  1. El código fuente completo de tu ejemplo
  2. El resultado real de esto, no un resumen

Aquí está mi código, que funciona:

import socket, sys def alert(msg): print >>sys.stderr, msg sys.exit(1) (family, socktype, proto, garbage, address) = / socket.getaddrinfo("::1", "http")[0] # Use only the first tuple s = socket.socket(family, socktype, proto) try: s.connect(address) except Exception, e: alert("Something''s wrong with %s. Exception type is %s" % (address, e))

Cuando el servidor escucha, no obtengo nada (esto es normal), cuando no lo hace, obtengo el mensaje esperado:

Something''s wrong with (''::1'', 80, 0, 0). Exception type is (111, ''Connection refused'')