Сокет Python работает по-разному при каждом запускеPython

Программы на Python
Anonymous
Сокет Python работает по-разному при каждом запуске

Сообщение Anonymous »

Я пытаюсь создать сервер, который управляет чатом и клиентом на Python.
Однако, когда я запускаю код, он иногда работает, а иногда нет. .
Вот фрагменты кода, которые я считаю важными.
Этот фрагмент находится в функции, которая обрабатывает новые соединения (server.py)
h1>
Он получает введенное пользователем имя пользователя и проверяет его на достоверность.
Затем он отправляет обратно строковое значение, представляющее текст, который необходимо ввести для отключения.

Код: Выделить всё

new_socket, addr = server_socket.accept()
username_is_taken = False

entered_username = new_socket.recv(8).decode()

for client in client_sockets:
if client[1] == entered_username:
username_is_taken = True

if username_is_taken:
new_socket.send("/USER_TAKEN".encode())
new_socket.close()
continue
else:
new_socket.send("/USER_OK".encode())

if len(client_sockets) == args.max_clients:
new_socket.send("/CHATROOM_FULL".encode())
new_socket.close()
continue
else:
new_socket.send("/CHATROOM_OK".encode())

new_socket.send(args.disconnect_message.encode())
print("sending disconnect_message...")
его фрагмент кода принимает имя пользователя, а затем получает сообщения от сервера, чтобы проверить, занято ли уже имя пользователя или переполнен ли чат (client.py)

Код: Выделить всё

while True:
username = input("Enter your username (max 8 characters) - Others will be able to see this!\n")

my_socket.send(username.encode())

username_is_valid = my_socket.recv(64).decode()
chatroom_is_valid = my_socket.recv(64).decode()

if chatroom_is_valid == "/CHATROOM_FULL":
print("The chatroom is currently full, try again later.")
my_socket.close()
exit()

if username_is_valid == "/USER_TAKEN":
print("This username is taken, try something different!")
continue
break

print("Sucessfully connected to server!")

disconnect_message = my_socket.recv(64).decode()

print(f"Enter '{disconnect_message}' to disconnect!")
Вот проблема:
С серверным кодом все в порядке, он работает и ждет соединения.
НО! Когда я запускаю клиент, он запрашивает имя пользователя, и после того, как пользователь вводит его, он иногда проходит весь путь и печатает эту строку print(f"Введите '{disconnect_message}', чтобы отключиться!" ), но иногда это не так, я думаю, что он ожидает получения сообщения об отключении в предыдущей строке. В других случаях он даже этого не делает, а останавливается и ждет проверки username_is_valid или проверки Chatroom_is_valid...
Я думаю, что может быть условие гонки, которое мне не хватает...
Очевидно, что я создал проблему, но я просто не могу ее найти...
Вот весь код
На случай, если я что-то пропустил
https://codeshare.io/VNyAWP

Подробнее здесь: https://stackoverflow.com/questions/790 ... n-each-run

Вернуться в «Python»