voici mon client python tcp. Je veux envoyer un objet JSON au serveur. Mais je ne peux pas envoyer l'objet à l'aide de la méthode sendall (). Comment puis-je faire ceci?
import socket
import sys
import json
Host, PORT = "localhost", 9999
m ='{"id": 2, "name": "abc"}'
jsonObj = json.loads(m)
data = jsonObj
# Create a socket (SOCK_STREAM means a TCP socket)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
# Connect to server and send data
sock.connect((Host, PORT))
sock.sendall(jsonObj)
# Receive data from the server and shut down
received = sock.recv(1024)
finally:
sock.close()
print "Sent: {}".format(data)
print "Received: {}".format(received)
Ignorez la partie json.loads()
. Envoyez l'objet json en tant que chaîne json et chargez-le à partir de la chaîne sur le client TCP.
Vérifiez également: Dictionnaire d’envoi Python via TCP
Dès que vous pouvez le savoir depuis le dictionnaire d’envoi Python via TCP Il est préférable de convertir l’objet JSON en dictionnaire et d’utiliser l’extrait de code suivant.
import json
data = json.load(open("data.json"))
//or
data = json.load('{"id": 2, "name": "abc"}')
type(data)
print(data[<keyFromTheJsonFile>])
Vous devriez le sérialiser avec pickle
:
import pickle
dict = {...}
tcp_send(pickle.dumps(dict))
Et à l'autre bout:
import pickle
dict = pickle.loads(tcp_recieve())
Si l’autre extrémité n’est pas écrite en python, vous pouvez utiliser un format de sérialisation des données, tel que xml , json ou yaml .