Python套接字超时问题。如何更好地控制此代码的流程?

时间:2011-05-16 02:09:09

标签: python sockets timeout

在使用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 个答案:

答案 0 :(得分:1)

你不能在我相信的超时插座上调用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)

答案 1 :(得分:0)

你有什么不使用它?

 if socket.timeout:
    print("Timed out.")
 else:
     data = s.recv(2048)
     print(data)