Я пытаюсь создать сервер, который принимает несколько клиентов. Клиенты могут отправлять сообщения на сервер, и сервер печатает эти сообщения. Мой код, приведенный ниже, дает странный результат, когда сообщения принимаются и распечатываются только на самом последнем соединении.
server.py
import socket
import _thread
HOST = "192.168.1.84"
PORT = 5000
def client_thread(conn):
welcome_message = "Connected to server " + HOST + ":" + str(PORT) + "\n"
conn.send(welcome_message.encode("ascii"))
while True:
data = connection.recv(2048)
message = data.decode("ascii")
if not data:
break
print("(" + address[0] + ":" + str(address[1]) + ") " + message)
connection.close()
with socket.socket() as server_socket:
try:
server_socket.bind((HOST, PORT))
server_socket.listen(10)
print("Server hosted on " + HOST + ":" + str(PORT) + "\n")
while True:
connection, address = server_socket.accept()
_thread.start_new_thread(client_thread, (connection,))
print("Connection from " + address[0] + ":" + str(address[1]))
except socket.error as error_message:
print("Error: " + str(error_message))
client.py
import socket
HOST = "192.168.1.84"
PORT = 5000
with socket.socket() as client_socket:
try:
client_socket.connect((HOST, PORT))
data = client_socket.recv(2048)
print(data.decode("ascii"))
while True:
message = input()
data = message.encode("ascii")
client_socket.send(data)
except socket.error as error_message:
print("Error: " + str(error_message))
Поведение выходных данных проблемы:
Клиент 1 может подключаться к серверу и отправлять сообщения. Сервер получает и печатает эти сообщения нормально.
Теперь, когда Клиент 2 подключается к серверу, сообщения Клиента 1 больше не отправляются на сервер. Теперь только Клиент 2 может отправлять сообщения на сервер и печатать их нормально.
Для дальнейшего выполнения клиент 3 подключается к серверу. Теперь сообщения как Клиента 1, так и Клиента 2 не отправляются на сервер, а только сообщения Клиента 3.