Warum erhält mein Server-Socket zwei gleiche Nachrichten, obwohl zwei verschiedene Nachrichten gesendet werden?Python

Python-Programme
Anonymous
 Warum erhält mein Server-Socket zwei gleiche Nachrichten, obwohl zwei verschiedene Nachrichten gesendet werden?

Post by Anonymous »

Ich erstelle ein Multiplayer-Spiel in Python unter Verwendung der Sockets-Bibliothek.
Dies ist mein serverseitiger Code (ich bin neu in diesem Bereich, daher ist er möglicherweise nicht der am besten lesbare/pythonische Code

Code: Select all

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()
Es empfängt nicht self.data_1, sondern empfängt zwei der self.data_2, wenn es keinen Grund dafür gibt. Hier ist der Sendecode vom Client

Code: Select all

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()
Beide Clients haben den gleichen Code, aber Client 2 überholt immer die Sendenachricht von Client 1 und dann senden beide Clients dasselbe 2:x:y, was für mich keinen Sinn ergibt. Hat es etwas damit zu tun, dass der TCP-Bytestream durcheinander gerät? Das bereitet mir große Kopfschmerzen! Lassen Sie mich wissen, wenn ich weitere Informationen benötigen.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post