У меня есть сервер, который принимает несколько клиентских подключений, и я хочу, чтобы он прекратил принимать подключения ТОЛЬКО ЕСЛИ первый клиент, который подключается (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"
на клавиатуре, сервер уже ожидает принятия новое соединение.
Любые предложения о том, как я могу условно принимать подключения к сокетам при использовании потоков для обработки клиентских запросов ??