【发布时间】:2017-08-29 14:54:37
【问题描述】:
我需要在同时运行的 Python2 和 Python3 程序之间发送 numpy 数组。在做了一些研究之后,我决定通过套接字连接发送泡菜。
我能够建立连接并来回发送字符串,但尝试发送 numpy 数组会导致 ascii 错误。这是我的客户端/服务器正在做的事情:
### Imports on both client and server ###
import socket as sc
import numpy
try:
import cPickle as pickle
except ImportError:
import pickle
pickle.HIGHEST_PROTOCOL = 2
### Python2 client ###
data= numpy.ones((1, 60))
sock.connect(SERVER_ADDR)
try:
serialized_data = pickle.dumps(data, protocol=2)
except pickle.PicklingError as e:
raise e
try:
sock.send(serialized_data )
except sc.error as e:
logging.error('Connection ended')
### Python3 server ###
"""
Given a client socket, and until the client has closed the session:
- receive input from client
- unpickle and print it
"""
while client != '':
try:
data = client.recv(4096)
except sc.error as e:
if e.errno != errno.ECONNRESET:
print('Connection ended')
else:
try:
unserialized_input = pickle.loads(input) ##### ERROR HERE #####
except pickle.UnpicklingError as e:
raise e
else:
print(unserialized_input)
### Error on server ###
UnicodeDecodeError: 'ascii' codec can't decode byte 0xf0 in position 6: ordinal not in range(128)
我尝试搜索相关问题,但除了建议的解决方案here 之外找不到任何相关内容,因为我需要使用 Python2,所以这对我不起作用。我不确定如何继续。有什么想法吗?
【问题讨论】:
-
TCP 是一种流协议。你怎么知道你收到了一个完整的腌制消息?您必须实施协议以确保您收到完整的数据。