Witam,
Ostatnio piszę sobie prosty (chyba :)) programik.
Działa on następująco: Plik serwera wysyła do pliku klienta obiekt poddany serializacji modułem pickle.
Jednocześnie na komputerze serwera i klienta z użyciem biblioteki PyGame obiekt ten jest rysowany.
Problem pojawia się gdy chcę wysłać do pliku klienta właśnie ten obiekt. Pojawia się taki błąd:
_pickle.UnpicklingError: invalid load key, '@'.
kody źródłowe plików:
serwera:
#!/usr/bin/python
import socket
import threading
import pickle
import pygame,sys
from pygame.locals import *
class Test:
def __init__(self,x,y):
self.x = x
self.y = y
def draw(self,Window):
pygame.draw.rect(Window,(255,0,0),(self.x,self.y,50,50))
s = socket.socket()
host = socket.gethostname()
port = 12345
s.bind((host, port))
s.listen(1)
c, addr = s.accept()
print ('Uzyskano polaczenie z: ', addr)
def update(c):
Window = pygame.display.set_mode((640,640))
t = Test(320,320)
end = False
while not end:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
end = True
t.draw(Window)
to_send = pickle.dumps(t)
c.send(to_send)
pygame.display.update()
c.close()
update(c)
klienta:
#!/usr/bin/python
import socket
import threading
import pygame,sys
import pickle
from pygame.locals import *
s = socket.socket()
host = 'jakis_adres :)'
port = 12345
class Test:
def __init__(self,x,y):
self.x = x
self.y = y
def draw(self,Window):
pygame.draw.rect(Window,(255,0,0),(self.x,self.y,50,50))
def update(c):
while True:
try:
c.connect((host, port))
except:
pass
else:
break
Window = pygame.display.set_mode((640,640))
end = False
while not end:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
end = True
pygame.display.update()
recw = c.recv(1024)
t = pickle.loads(recw)
t.draw(Window)
c.close()
update(s)
Z góry dziękuję za pomoc.