Python 尝试使用套接字发送pickle数据后出现TypeError

Python 尝试使用套接字发送pickle数据后出现TypeError,python,image,sockets,python-2.7,pickle,Python,Image,Sockets,Python 2.7,Pickle,我正试图从服务器向客户端发送一个映像,所以我想我应该使用pickle来序列化映像 服务器的代码: import socket import cPickle as pickle server_socket = socket.socket() server_socket.bind(('127.0.0.1', 1729)) server_socket.listen(1) (client_socket, client_address) = server_socket.accept() client

我正试图从服务器向客户端发送一个映像,所以我想我应该使用pickle来序列化映像

服务器的代码:

import socket
import cPickle as pickle

server_socket = socket.socket()
server_socket.bind(('127.0.0.1', 1729))

server_socket.listen(1)
(client_socket, client_address) = server_socket.accept()

client_request = client_socket.recv(1024)

if client_request == 'IMG':
    img_data =  actions.options[client_request]()
    client_socket.send(pickle.dump(img_data, -1))
else:
    client_socket.send(actions.options[client_request]())

server_socket.close()
但是当我尝试运行它时(在检查
img_data
是否正确创建后),我得到了错误:

文件“C:/py\u prog/my\u server.py”,第25行,在
client_socket.send(pickle.dump(img_数据,-1))
TypeError:参数必须具有“write”属性


如何将pickle数据的属性更改为write?

若要获取pickle字符串,应使用,而不是(它接受类似文件的对象作为第二个参数)


要获取pickle字符串,应该使用,not(它接受第二个参数的类文件对象)


要获取pickle字符串,应该使用,not(它接受第二个参数的类文件对象)


要获取pickle字符串,应该使用,not(它接受第二个参数的类文件对象)



@是的,除非你想从类似文件的对象加载它
pickle.loads
接受pickle字符串。我现在尝试了它,得到了
EOFError
,没有任何关于错误原因的解释。@Coargiaquis,如果你能给我看完整的回溯就好了。回溯是
traceback(最近一次调用):文件“C:/py prog/client.py”,第21行,在actions\u funcs.show\img(数据)中文件“C:/py prog\actions\u funcs.py”,第41行,在show\u img img=pickle.load(data)eoferor
中。我检查了pickle数据的len,它大于1024。有没有办法预测pickle输出的大小?@CoarguAliquis,错误的原因是您没有提供完整的pickle字符串。注意,您没有收到完整的pickle字符串。@CoarguAliquis,是的,除非您想从类文件对象加载它
pickle.loads
接受pickle字符串。我现在尝试了它,得到了
EOFError
,没有任何关于错误原因的解释。@Coargiaquis,如果你能给我看完整的回溯就好了。回溯是
traceback(最近一次调用):文件“C:/py prog/client.py”,第21行,在actions\u funcs.show\img(数据)中文件“C:/py prog\actions\u funcs.py”,第41行,在show\u img img=pickle.load(data)eoferor
中。我检查了pickle数据的len,它大于1024。有没有办法预测pickle输出的大小?@CoarguAliquis,错误的原因是您没有提供完整的pickle字符串。注意,您没有收到完整的pickle字符串。@CoarguAliquis,是的,除非您想从类文件对象加载它
pickle.loads
接受pickle字符串。我现在尝试了它,得到了
EOFError
,没有任何关于错误原因的解释。@Coargiaquis,如果你能给我看完整的回溯就好了。回溯是
traceback(最近一次调用):文件“C:/py prog/client.py”,第21行,在actions\u funcs.show\img(数据)中文件“C:/py prog\actions\u funcs.py”,第41行,在show\u img img=pickle.load(data)eoferor
中。我检查了pickle数据的len,它大于1024。有没有办法预测pickle输出的大小?@CoarguAliquis,错误的原因是您没有提供完整的pickle字符串。注意,您没有收到完整的pickle字符串。@CoarguAliquis,是的,除非您想从类文件对象加载它
pickle.loads
接受pickle字符串。我现在尝试了它,得到了
EOFError
,没有任何关于错误原因的解释。@Coargiaquis,如果你能给我看完整的回溯就好了。回溯是
traceback(最近一次调用):文件“C:/py prog/client.py”,第21行,在actions\u funcs.show\img(数据)中文件“C:/py prog\actions\u funcs.py”,第41行,在show\u img img=pickle.load(data)eoferor
中。我检查了pickle数据的len,它大于1024。有没有办法预测pickle输出的大小?@CoarguAliquis,错误的原因是您没有提供完整的pickle字符串。瞧,你没有收到完整的泡菜串。
>>> import cPickle as pickle
>>> pickle.dump('not a real image data', -1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: argument must have 'write' attribute
>>> pickle.dumps('not a real image data', -1)
'\x80\x02U\x15not a real image dataq\x01.'
client_socket.send(pickle.dumps(img_data, -1))
                              ^