如何连续尝试连接插座,直到它出现?

时间:2012-02-23 08:38:44

标签: python sockets

我有一个python套接字客户端程序。我需要做的是我的客户端应该等待服务器可用于连接然后连接到服务器。任何想法得到这个?

提前致谢....

2 个答案:

答案 0 :(得分:2)

可能最简单的解决方案是在while循环中运行socket.connect_ex(),类似(假设您要使用tcp)

import socket
from time import sleep
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
while s.connect_ex(("10.0.0.1", 80)) != 0:
    sleep(10)

答案 1 :(得分:0)

我建议创建一个连接到服务器的函数,然后使用装饰器包装它。这将保持连接服务器和重试的两种不同逻辑,这可能是维护代码的更好方法。

但是,如果您只想尝试一次重新连接到服务器一次,那么这可能会有点过大,并且最终可能会使代码变得复杂,但是如果代码中的其他功能需要重新尝试,我强烈建议您使用装饰,因为它可以 减少代码中的冗余。

def solve_issue():
    sleep(10)

def attempt_reconnect(func,*args,**kwargs):
    MAX_RETRY=2
    for i in range(MAX_RETRY):
        try:
            return_value=func(*args,**kwargs)
            break
        except Exception as e:
            print("error"+str(e))
            return_value=e
            solve_issue()
    return return_value

@attempt_reconnect
def connect_to_server():
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)