Почему мой серверный сокет получает два одинаковых сообщения, когда отправляются два разных сообщения?Python

Программы на Python
Ответить
Anonymous
 Почему мой серверный сокет получает два одинаковых сообщения, когда отправляются два разных сообщения?

Сообщение Anonymous »

Я создаю многопользовательскую игру на Python, используя библиотеку сокетов.
Это мой серверный код (я новичок в этом, поэтому он может быть не самым читаемым/pythonic

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

import socket
import threading
import time

class Server():
def __init__(self):
self.host = "0.0.0.0"
self.port = 25566

self.client1 = False
self.client2 = False

self.thread_count = 0
self.threads = []
self.connections = []

self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.bind((self.host,self.port))
self.sock.listen()

self.data_1 = ""
self.data_2 = ""

while True:
conn, addr = self.sock.accept()
self.connections.append(conn)
worker = threading.Thread(target=self.handle_client, args=(conn,addr))
self.threads.append(worker)
worker.start()

def handle_client(self, conn, addr):
print(f"Connected to {addr}")
self.thread_count += 1
try:
while True:
data = conn.recv(1024)
decoded_data = data.decode()
print(f"Received {decoded_data} from {addr}")
print(decoded_data[0])
if decoded_data == "Boot1":
self.client1 = True
encoded_data = ("confirmed").encode()
self.connections[0].sendall(encoded_data)
elif decoded_data == "Boot2":
self.client2 = True
encoded_data = ("confirmed").encode()
self.connections[1].sendall(encoded_data)
if self.client1 and self.client2:
if decoded_data[0] == "1":
self.data_1 = decoded_data
print(f"\n\n{self.data_1}")
elif decoded_data[0] == "2":
self.data_2 = decoded_data
if self.data_1 != "" and self.data_2 != "":
print(self.data_1)
package_data = self.data_1 + self.data_2
encoded_data = package_data.encode()
self.data_1 == ""
self.data_2 == ""
for conn in self.connections:
conn.sendall(encoded_data)
except KeyboardInterrupt:
for conn in self.connections:
conn.close()
self.sock.close()

Server()
Он не получает self.data_1, а получает два файла self.data_2, когда для этого нет причин. Вот код отправки от клиента

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

def send_data():
try:
encoded_data = (f"{player.id}:{player.x_scroll}:{player.y_scroll}:").encode()
print(f"Sending {encoded_data}")
player.sock.sendall(encoded_data)
data = player.sock.recv(1024)
decoded_data = data.decode()
# parse the data
data_list = decoded_data.split(":")
print(data_list)
except KeyboardInterrupt:
print("aye aye")
player.sock.close()
quit()
Оба клиента имеют один и тот же код, но клиент 2 всегда обгоняет сообщение об отправке клиента 1, а затем оба клиента отправляют одно и то же 2:x:y, что для меня не имеет смысла. Это как-то связано с путаницей байтового потока TCP? Это вызывает у меня огромную головную боль! Дайте мне знать, если мне нужно будет предоставить дополнительную информацию.

Подробнее здесь: https://stackoverflow.com/questions/798 ... -two-diffe
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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