Python: принимать подключения к сокету на основе условия - PullRequest
0 голосов
/ 21 марта 2019

У меня есть сервер, который принимает несколько клиентских подключений, и я хочу, чтобы он прекратил принимать подключения ТОЛЬКО ЕСЛИ первый клиент, который подключается (ClientID = 1, ClientID назначаются при получении новых подключений), обнаруживает ввод с клавиатуры «S» на его консоль. Каждый клиент обрабатывается отдельным потоком на сервере. Это в основном работает так ...

Код сервера:

someBoolean = False
while not someBoolean:
    accept() a client connection
    Assign/Send ClientID [1, 2, 3, ...]
    Add client connection information to a list
    Thread(target = someFunction).start() to handle request for each client
def someFunction():
global someBoolean
    send ClientID to the client
    if ClientID == 1:
        if "*" is received:
            someBoolean = True
            send "HI" too all connected clients

Код клиента:

connect() to host (server)
Receive ClientID [1, 2, 3, ...] as assigned by server
If ClientID == 1:
    Function to detect "S" key press
        If key press is detected, then inform server (Send something like "*")
Else if ClientID > 1:
    Wait to receive some information from server like "HI"

Поскольку я веду список клиентов, я могу отправить «HI» всем подключенным клиентам, как только сервер получит «*» от клиента с ID = 1. Основной цикл while на сервере ожидает принятия соединения как как только я запускаю сервер. Как только клиентское соединение принято, оно снова возвращается назад и ожидает другого клиентского соединения. Если я нажимаю «S» на клиенте с ID = 1, то сообщение «*» действительно отправляется на сервер, а «HI» принимается всеми клиентами, как указано выше.

Основная проблема заключается в том, что цикл while не прерывается, когда я нажимаю "S" на клиенте с ID = 1, потому что к тому времени, когда я нажимаю "S" на клавиатуре, сервер уже ожидает принятия новое соединение.

Любые предложения о том, как я могу условно принимать подключения к сокетам при использовании потоков для обработки клиентских запросов ??

...