Python 使用cpickle序列化对象时的EOF
我有以下的引述,这似乎很有效:Python 使用cpickle序列化对象时的EOF,python,pickle,Python,Pickle,我有以下的引述,这似乎很有效: from cPickle import * class Clientthread(threading.Thread): def __init__(self,clientsocket, mystring): self.client = clientsocket self.clients = [clientsocket] self.testEntity = entity.Entity(position = [1,7])
from cPickle import *
class Clientthread(threading.Thread):
def __init__(self,clientsocket, mystring):
self.client = clientsocket
self.clients = [clientsocket]
self.testEntity = entity.Entity(position = [1,7])
self.testTosend = dumps(self.testEntity,2)
self.client.send(self.testTosend)
然而,当我试图用
news=self.s.recv(1024)
realnews = loads(news)
我在使用加载的行中得到一个EOF错误。
你知道这是从哪里来的吗?假设
self.s
是一个socket
。recv
方法并不总是返回您请求的确切字节数。如文档中所述,该量是recv
返回的最大字节量
这会导致不完整的数据被传递到你的
加载文件中
哦,这就解释了很多。你知道我该如何找出我的对象有多少字节吗?如果它应该很大,是否有其他方法来接收所有字节?是的,s当然是一个套接字。你需要设置某种协议通过套接字发送东西。最简单的方法是发送前面以字节为单位的每个数据块。这样,接收端总是知道期望和读取的字节数。我检查过了——事实上我发送了191个字节——所以对象不可能太大。这个错误还有其他可能的原因吗?或者,换言之,接收端可能接收4096字节,但我只发送191字节。可能有什么问题?