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