Недавно я немного освоился в разработке игр для pygame и хотел добавить в игру какую-то многопользовательскую функциональность. Однако я немного разбирался с сокетами, и теперь возникла странная проблема, я хотел переместить свой класс клиент / сеть за пределы моего серверного пакета, чтобы начать сборку сервера.
Но как только я перееду мой клиент за пределами моего серверного пакета, я продолжаю получать ошибки EOF, пытаюсь выяснить, в чем проблема на самом деле, сервер на самом деле отправляет данные, но на пути между клиентом / сервером они теряются по какой-то причине (только когда класс клиента находится вне папки серверного класса ??)
Основной клиент oop (удален):
def start(self):
self.player = self.network.login
self.running = True
while self.running:
# Send current player object(pickle), receive back list of other players.
self.other_players = self.network.send(self.player)
Сетевой класс:
import socket
import pickle
class Network:
def __init__(self):
self.client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.server = "127.0.0.1"
self.port = 5555
self.addr = (self.server, self.port)
self.login = self.connect()
def login(self):
return self.login
def connect(self):
try:
self.client.connect(self.addr)
# Gives EOF error:
return pickle.loads(self.client.recv(2048))
except:
pass
def send(self, data):
try:
self.client.send(pickle.dumps(data))
return pickle.loads(self.client.recv(2048))
except socket.error as e:
print(e)
Поток клиента:
def threaded_client(self, conn):
# Start -> send client object.
player_id = len(self.players)-1
conn.send(pickle.dumps(self.players[player_id]))
reply = ""
while True:
try:
# Load object recieved back from client.
data = pickle.loads(conn.recv(2048))
# Assign player object to playerlist.
self.players[player_id] = data
if data:
reply = self.players
else:
print(conn, "disconnected")
self.players.pop(player_id)
break
conn.sendall(pickle.dumps(reply))
except:
break
print("Lost connection")
conn.close()