Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python 2.7与json的套接字通信_Python_Json_Python 2.7_Sockets - Fatal编程技术网

python 2.7与json的套接字通信

python 2.7与json的套接字通信,python,json,python-2.7,sockets,Python,Json,Python 2.7,Sockets,我想通过套接字发送/接收数据 我使用Python2.7是因为ROS(melodic),也使用Python3.6是因为tensorflow dict数据,例如{'key_name':[[1,2,3],[4,5,6]]},通过jsonecoder.encoder()发送和编码 客户端使用load()接收json数据并将其重新发送到服务器。 客户端使用Python2.7,服务器使用Python3.6 def _send(socket, send_data): json_data = json.

我想通过套接字发送/接收数据

我使用Python2.7是因为ROS(melodic),也使用Python3.6是因为tensorflow

dict数据,例如
{'key_name':[[1,2,3],[4,5,6]]}
,通过
jsonecoder.encoder()发送和编码
客户端使用
load()
接收json数据并将其重新发送到服务器。
客户端使用Python2.7,服务器使用Python3.6

def _send(socket, send_data):
    json_data = json.JSONEncoder().encode(send_data)
    socket.sendall(json_data)

def _recv(socket):
    recv_data = socket.recv(BUFSIZE)
    json_data = json.loads(recv_data, encoding="utf-8")

    return json_data
我有错误

  File "/usr/lib/python3.6/json/deoder.py", line 357, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 4097 (char 4096)

我需要一个在Python2.7和3.6上运行的python代码。

错误来自json解码器

json_data = json.loads(recv_data, encoding="utf-8"),
当您的json数据(在您的示例中是
recv_data
)格式不正确时,会出现这种情况。通常缺少逗号“,”之类的。
对于调试,我建议您先转储服务器上接收的数据,然后再使用
json.loads()

如何知道响应只有4096字节?这个答案似乎证实了@user207421的建议。您应该检查json输出,并确保不会因为BUFSIZE太小而切断任何数据。您说的没错。我认为它可能不是格式错误的json,而是
BUFSIZE
不够大。@Simon是的。转储输出是确认我已经厌倦了你的答案的方法,但它对我不起作用。所以我改了库msgpack。我觉得不错。非常感谢。