ここに私のpython tcpクライアント。サーバーにjsonオブジェクトを送信したいのですが、sendall()メソッドを使用してオブジェクトを送信できません。どうすればよいですか?
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)
json.loads()
部分をスキップします。 jsonオブジェクトをjson文字列として送信し、TCPクライアントの文字列から読み込みます。
次も確認してください: Pythonは辞書をTCPに送信する
TCP経由で辞書を送信するPython からわかるように、JSONオブジェクトを辞書に変換し、次のスニペットを使用することをお勧めします
import json
data = json.load(open("data.json"))
//or
data = json.load('{"id": 2, "name": "abc"}')
type(data)
print(data[<keyFromTheJsonFile>])
pickle
でシリアル化する必要があります:
import pickle
dict = {...}
tcp_send(pickle.dumps(dict))
そしてもう一方の端で:
import pickle
dict = pickle.loads(tcp_recieve())
反対側がpythonで記述されていない場合は、 xml 、 json 、または yaml などのデータシリアル化形式を使用できます。