Задать вопрос
@scxrp

Как заставить клиента ждать запуска сервера?

Простейшая отправка данных с клиента на сервер. Но мне нужно, чтобы клиент всегда был запущен на компьютере и постоянно посылал данные. А теперь предположим, что сервер упал, тогда клиент просто отваливается и его нужно снова включать. Но возможности всё время подключать клиентов у меня нет. Подскажите, как можно клиентом пытаться подключиться до тех пор пока сервер не включится?
def main():
    SERV_ADRESS = ('192.168.166.113', 65042)
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    client.connect(SERV_ADRESS)

    while True:
        client.sendall(json.dumps(get_info()).encode('utf-8'))
        time.sleep(2)
  • Вопрос задан
  • 156 просмотров
Подписаться 1 Простой 3 комментария
Пригласить эксперта
Ответы на вопрос 2
Vindicar
@Vindicar
RTFM!
Ну если простейшее решение...
Таймаут на connect(), connect() завернуть в try-except, который ловит socket.timeout и спит несколько секунд. Всё это завернуть в while True.
Ответ написан
Комментировать
@scxrp Автор вопроса
Спасибо) Пока не рассмотрел твой вариант, нашёл решение замудрённым путем с помощью потоков)
def main():
    try:
        SERV_ADRESS = ('192.168.166.113', 65042)
        client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        client.connect(SERV_ADRESS)
        while True:
            try:
                client.sendall(json.dumps(get_info()).encode('utf-8'))
            except ConnectionResetError:
                return False
            print('Информация отправлена на сервер')
            time.sleep(2)
    except ConnectionRefusedError:
         print('Отсутствует подключение к серверу. Попытка переподключиться...')
         return False


if __name__ == '__main__':
    while True:
        if main() == False:
            start_new_thread(main, ())
            time.sleep(5)
        else:
            start_new_thread(main, ())
            break
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы