2016-10-02 32 views
2

這裏是我的python tcp客戶端。我想發送一個json對象給服務器,但是我不能使用sendall()方法發送這個對象。我怎樣才能做到這一點?如何在Python中使用tcp socket發送json對象

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) 
+0

當你說「我不能發送的對象」,你看到的任何錯誤?或者程序卡住了?你是否證實TCP服務器正在監聽localhost:9999? –

+0

服務器正在偵聽。並出現以下錯誤.. 回溯(最近通話最後一個): 文件 「C:/Users/Lochana/PycharmProjects/SocketClient/TCPClient.py」 19行,在 sock.sendall(jsonObj) 文件在第0128行中的「C:\ Python27 \ lib \ socket.py」中,第012行,在方法 中返回getattr(self._sock,name)(* args) ** TypeError:sendall()參數1必須是字符串或緩衝區, ** –

+0

在這種情況下,您需要將字典序列化爲字符串。或者傳遞對象'm'來發送,而不是'jsonObj'。 (什麼是序列化 - https://en.m.wikipedia.org/wiki/Serialization) –

回答

1

跳過json.loads()部分。發送json對象作爲json字符串,並從TCP客戶端的字符串中加載它。

同時檢查:Python sending dictionary throught TCP

+0

謝謝。但有沒有辦法發送一個json對象? –

+0

不,您無法發送JSON對象。你需要先序列化它 –

+0

好的......謝謝:) –