web-dev-qa-db-ja.com

pythonでtcpソケットを使用してjsonオブジェクトを送信する方法

ここに私の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)
9

json.loads()部分をスキップします。 jsonオブジェクトをjson文字列として送信し、TCPクライアントの文字列から読み込みます。

次も確認してください: Pythonは辞書をTCPに送信する

4

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で記述されていない場合は、 xmljson 、または yaml などのデータシリアル化形式を使用できます。

1
Yusef Mohamadi