Ошибка времени ожидания сокета Python. Как лучше контролировать поток этого кода? - PullRequest
0 голосов
/ 16 мая 2011

Во время работы с библиотекой сокетов в Python 2.7 я столкнулся с проблемой получения кода, работающего так, как я хочу. Мне бы хотелось, чтобы код перебирал диапазон IP-адресов и открывал сокет-соединение для каждого ip в диапазоне. Если время соединения истекло, распечатайте ошибку и перейдите к следующему адресу в диапазоне. Я использую цикл for, чтобы выполнить это, однако всякий раз, когда сокет встречает тайм-аут, цикл прерывается. Что я делаю неправильно? Я предполагаю, что это способ обработки исключения. Кто-нибудь может указать мне правильное направление?

from IPy import IP
ip = IP(sys.argv[1])
for x in ip:
    print("Connecting to: {0}".format(str(x)))
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.settimeout(10)
    svr = (str(x), 25)
    s.connect(svr)
    if socket.timeout:
        print("Timed out.")
    data = s.recv(2048)
    print(data)
    continue

print("Range Completed.")
sys.exit(1)

Ответы [ 2 ]

1 голос
/ 16 мая 2011

Вы не можете вызвать s.recv (2048) для сокета тайм-аута, как я полагаю.Я думаю, что этот модифицированный код должен работать нормально.

from IPy import IP
ip = IP(sys.argv[1])
for x in ip:
    print("Connecting to: {0}".format(str(x)))
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.settimeout(10)
    svr = (str(x), 25)
    s.connect(svr)
    if socket.timeout:
        print("Timed out.")
    else:
       data = s.recv(2048)
       print(data)
    continue

print("Range Completed.")
sys.exit(1)
0 голосов
/ 16 мая 2011

Что вы не используете это?

 if socket.timeout:
    print("Timed out.")
 else:
     data = s.recv(2048)
     print(data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...