как постоянно пытаться соединиться с сокетом, пока он не появится? - PullRequest
1 голос
/ 23 февраля 2012

У меня есть клиентская программа для сокета Python. Что мне нужно сделать, так это то, что мой клиент должен подождать, пока сервер не будет доступен для соединения, а затем соединиться с сервером. Любая идея, чтобы получить это?

Заранее спасибо ....

Ответы [ 2 ]

2 голосов
/ 23 февраля 2012

Вероятно, самое простое решение - запустить socket.connect_ex() в цикле while, что-то вроде (при условии, что вы хотите использовать 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)
0 голосов
/ 01 февраля 2019

Я бы порекомендовал создать функцию, которая подключается к серверу, а затем обернуть его с помощью декоратора. Это сохранит две разные логики подключения к серверу и повторных попыток, что может стать лучшим способом поддержки вашего кода.

Однако это может быть немного излишним и может привести к усложнению кода, если вы попытаетесь повторно подключиться к серверу только один раз, но если другие функции в коде требуют повторной попытки, я настоятельно рекомендую использовать декоратор, так как он может уменьшить избыточность в коде.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...