• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Python sockety , serializacja obiektów

Fiszki IT
Fiszki IT
0 głosów
454 wizyt
pytanie zadane 23 stycznia 2016 w Python przez Michał628496 Pasjonat (17,340 p.)
edycja 23 stycznia 2016 przez Michał628496

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.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

+1 głos
1 odpowiedź 1,011 wizyt
pytanie zadane 24 lipca 2019 w Python przez Ziito Obywatel (1,110 p.)
0 głosów
0 odpowiedzi 42 wizyt
pytanie zadane 17 lutego w PHP przez mi-20 Stary wyjadacz (12,530 p.)
0 głosów
1 odpowiedź 412 wizyt
pytanie zadane 11 stycznia 2020 w C# przez Nowy Bywalec (2,570 p.)
Porady nie od parady
Nie wiesz jak poprawnie zredagować pytanie lub pragniesz poznać którąś z funkcji forum? Odwiedź podstronę Pomoc (FAQ) dostępną w menu pod ikoną apteczki.FAQ

84,742 zapytań

133,547 odpowiedzi

295,964 komentarzy

56,006 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...