【发布时间】:2016-10-02 13:46:14
【问题描述】:
这是我的 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)
【问题讨论】:
-
当您说“我无法发送对象”时,您是否看到任何错误?还是程序卡住了?您是否已验证 TCP 服务器正在侦听 localhost:9999?
-
服务器正在监听。并出现以下错误.. Traceback(最近一次调用最后一次):文件“C:/Users/Lochana/PycharmProjects/SocketClient/TCPClient.py”,第 19 行,在
sock.sendall(jsonObj) 文件“C: \Python27\lib\socket.py",第 228 行,在 meth 返回 getattr(self._sock,name)(*args) TypeError: sendall() argument 1 must be string or buffer, not dict -
在这种情况下,您需要将 dict 序列化为字符串。或者将对象 'm' 传递给 sendall 而不是 'jsonObj'。 (什么是序列化-en.m.wikipedia.org/wiki/Serialization)