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

В Python можно использовать модуль socket для создания клиент-серверных приложений и установки соединения между ними. Если вы хотите, чтобы клиент ждал запуска сервера, вам нужно сделать следующее:

1. Напишите серверный код, который будет прослушивать определенный порт и ждать входящих подключений от клиентов. Например:

import socket

def start_server():
    HOST = 'localhost'  # Измените на свой IP-адрес, если вы хотите прослушивать не только локальные подключения
    PORT = 12345  # Измените на свой порт
    
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.bind((HOST, PORT))
    server_socket.listen(1)
    
    print('Сервер запущен и ждет подключения клиента...')
    
    # Ждем подключения клиента
    client_socket, client_address = server_socket.accept()
    
    print(f'Клиент подключился с адресом {client_address}')
    
    # В этом месте можно сделать что-то с клиентским сокетом, например, прочитать данные или отправить ответ клиенту
    # Но для вашей цели просто подержим сервер запущенным
    
    # Закрываем сокеты
    client_socket.close()
    server_socket.close()

start_server()

2. Напишите клиентский код, который будет пытаться подключиться к серверу. Если сервер уже запущен, то клиент подключится и выполнит какие-либо операции. Если сервер еще не запущен, то клиент будет ждать, пока сервер не будет доступен. Например:

import socket
import time

def connect_to_server():
    HOST = 'localhost'  # Измените на IP-адрес сервера, к которому вы хотите подключиться
    PORT = 12345  # Измените на порт сервера, к которому вы хотите подключиться
    
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    while True:
        try:
            client_socket.connect((HOST, PORT))
            break
        except ConnectionRefusedError:
            print('Сервер недоступен. Повторная попытка подключения через 1 секунду...')
            time.sleep(1)
    
    print('Клиент успешно подключен к серверу')
    
    # В этом месте можно сделать какие-либо операции с сервером, например, отправить запрос или получить данные
    
    # Закрываем сокет
    client_socket.close()

connect_to_server()

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