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

Python sockety , serializacja obiektów

VPS Starter Arubacloud
0 głosów
578 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ź 2,417 wizyt
pytanie zadane 24 lipca 2019 w Python przez Ziito Obywatel (1,110 p.)
0 głosów
0 odpowiedzi 135 wizyt
pytanie zadane 17 lutego 2021 w PHP przez mi-20 Stary wyjadacz (13,190 p.)
0 głosów
1 odpowiedź 930 wizyt
pytanie zadane 11 stycznia 2020 w C# przez assassin Gaduła (3,260 p.)

92,452 zapytań

141,262 odpowiedzi

319,077 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...