2016-07-08 11 views
0

Ich erstelle einfache Server-Client-Architektur mit Gurke. Wenn ich Daten erhalte und sie drucke, wird die erste Nummer angezeigt, warum? Wie kann ich das vermeiden? zum Beispiel: ({2,2,4}, {3,4}) -> ({2,4}, {3,4})Pickle in Python, falsch empfangene Daten

Servercode: import Beize import Buchse

TCP_IP = '127.0.0.1' 
TCP_PORT = 5005 
BUFFER_SIZE = 1024 

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind((TCP_IP, TCP_PORT)) 
s.listen(1) 
conn, addr = s.accept() 


print ("conn info: ", conn) 
objrcv = pickle.loads(conn.recv(10024)) 
print("conn recv: ", objrcv) 
print("conn from: ", addr) 
print(objrcv) 

Client-Code

import socket 
import pickle 

name = 'name' 
TCP_IP = '127.0.0.1' 
TCP_PORT = 5005 
BUFFER_SIZE = 1024 

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 

data = pickle.dumps(name) 
s.connect((TCP_IP, TCP_PORT)) 
# #s.send(data) #powitalne info, dane gracza 

def wyslij_dane(my_array): #sending data 
    data = pickle.dumps(my_array) 
    if data[0] != 0: # pierwszy argument odpowiedzialny za poddanie sie 
     print('before send') 
     s.send(data) 
     print('after send') #just to control 
     #data_recv = s.recv(BUFFER_SIZE) 
     #print("received data:", data_recv) 


def rozlacz():#disconnecting 
    s.close() 

wyslij_dane(({2,2,4}, {3,4})) 
wyslij_dane({2,2,433}) 
wyslij_dane(0) 
rozlacz() 

Server-Ausgabe:

conn info: ... 
conn recv: ({2, 4}, {3, 4}) 
conn from: ('127.0.0.1', 51876) 
({2, 4}, {3, 4}) 

Und ein anderer questio n ist: Was kann ich tun, um alle sendenden Daten zu verarbeiten (alle wyslij_dane() -Funktionen aufrufen)?

+2

'{2,2,4}' ist ein Satz und Sätze haben einzigartige Elemente. Python interpretiert '{2,2,4}' als Menge {2,4} '. Das hat nichts mit Beizen zu tun. – Alec

+0

hah, dumme Aufsicht. Danke, könntest du mir erklären, was ich tun kann, um alle Daten zu senden (alle wyslij_dane() -Funktionen aufrufen)? –

Antwort

1

"{}" bedeutet, dass Sie ein Set verwenden. In einer Menge existiert jeder Gegenstand nur einmal. > "[]" Oder Tupels - - stattdessen können Sie eine Liste mit diesen verwenden> "()" So

wyslij_dane(({2,2,4}, {3,4})) 

wird

wyslij_dane(([2,2,4], [3,4])) 

und so weiter.