Ich versuche, ein Array über TCP von einem Server-ähnlichen Skript zu einem Client-ähnlichen Skript zu senden. Das Array ist variabel, daher werden die Daten mithilfe von Paketen gesendet und dann beim Client zusammengefügt.Python3 TypeError: Sequenzelement 0: erwartet ein Byte-ähnliches Objekt, int gefunden
Die Daten, die ich zu senden versuche, stammen aus dem handschriftlichen Zahlencode MNIST für Deep Learning. Die serverseitigen Code ist:
tcp = '127.0.0.1'
port = 1234
buffer_size = 4096
(X_train, y_train), (X_test, y_test) = mnist.load_data()
test_data = (X_test, y_test)
# Client-side Deep Learning stuff
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((tcp, port))
x = pickle.dumps(test_data)
s.sendall(x)
s.close()
Die clientseitige Skript ein neuronales Netz lädt, die die Testdaten verwendet Klassen vorherzusagen. Das Skript für das Hören auf die Daten ist:
tcp = '127.0.0.1'
port = 1234
buffer_size = 4096
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((tcp, port))
print ('Listening...')
s.listen(1)
conn, addr = s.accept()
data_arr = []
while True:
data_pack = conn.recv(buffer_size)
if not data: break
data_pack += data
my_pickle = b"".join(data_pack)
test_data = pickle.loads(my_pickle)
print ("Received: " + test_data)
conn.close()
# Irrelevant Deep Learning stuff...
Der Server die Daten ohne Probleme sendet, aber die Client-Abstürze beim Versuch, die Pakete, die durch den Client (my_pickle = ...) mit dem folgenden Fehler erhalten beitreten :
Wie sollte ich den Join formatieren, um die gesendeten Daten neu zu erstellen und für den Rest des Skripts zu verwenden?
Etwas scheint in Ihrem Server Beispiel-Code zu fehlen: Sie 'verwenden data', noch' data' nie wird zugewiesen. – Evert
Verwenden Sie einfach 'test_data = pickle.loads (data_pack)' und entfernen Sie die 'join'-Zeile:' data_pack' ist bereits ein bytes-Objekt, keine Liste. Sie können an eine Byte-Zeichenkette mit '+ =' anhängen, wie Sie es hier tun. – Evert