我想通過套接字發送PyGame圖像與Python 3.5,我總是有一個錯誤。Python3.5通過套接字發送對象(Pygame凸輪圖像)
我得到的圖像,我把它,然後我發送它。
在客戶端,我收到它,我unpickle它,我展示它。
,但我得到了一個錯誤:
fenetre.blit(img, (20, 30)) pygame.error: display Surface quit
這裏是我的服務器代碼(在一個至極發送圖像):
pygame.init()
pygame.camera.init()
cam = pygame.camera.Camera("/dev/video0", (680, 480))
cam.start()
class Streaming(Thread):
def __init__(self):
Thread.__init__(self)
def run(self):
s = socket.socket()
s.bind(('192.168.1.158', 12801))
s.listen(1)
while True:
sc, info = s.accept()
print("Video client connected : "+str(info))
try:
while True:
image = cam.get_image()
str_img = pickle.dumps(image)
sc.send(str_img)
print(str_img)
print("Sending Image")
time.sleep(0.005)
except Exception as e:
print(str(e))
以及客戶端的代碼:
fenetre = pygame.display.set_mode((900, 900))
class Receiving(Thread):
def __init__(self):
Thread.__init__(self)
self.clock = pygame.time.Clock()
def run(self):
global fenetre
si = socket.socket()
si.connect(("192.168.1.158", 12801))
while True:
img = si.recv(4096)
img = pickle.loads(img)
fenetre.blit(img, (20, 30))
pygame.display.flip()
self.clock.tick(60)
預先感謝!
您發送'680x480' ='326400'字節(或者甚至'326400 * 3'如果像素使用3個字節)但你只收到'4096'。在使用'pickle'和'blit'之前,您必須收到所有數據。 – furas
謝謝。但現在,問題是我無法在單個「recv」否接收大量數據?我該怎麼做326500字節? – Minege
你必須使用循環多次接收'4096'字節。如果你知道有多少字節將被髮送,那麼你知道你需要多少次接收'4096'字節。 – furas