我正在尝试取消通过套接字发送的对象
我的服务器有这个类
ActivePeerList = []
class PeerInfo():
def __init__(self):
self.hostname = ""
self.cookie = None
self.active = False
self.TTL = 7200
self.port = ""
self.no_of_times = 0
self.LastActiveDate = None
我将此类的实例附加到列表中,并通过套接字将其发送到客户端。
client[0].send(pickle.dumps(ActivePeerList))
当我尝试unpickle时出现此错误,即 pickle.loads(client.recv(1024))
AttributeError: Can't get attribute 'PeerInfo' on <module '__main__' (<_frozen_importlib.SourceFileLoader object at 0x0000000002A73828>)>
是否禁止将未知类(即未知的客户端)转移到客户端?即使它是,我将它吞没在List对象中。所以它应该工作。右??
任何帮助将不胜感激
答案 0 :(得分:3)
酸洗处理函数和类(通过一些样板)转移他们的限定名称,以便查看unpickling。它使得得到的泡菜小得多,但由于它不会传递关于它们的任何东西,你所尝试的东西将无法工作。您必须在同一个限定名称下的unpickling端具有引用的类,否则它将无效。
如果你想使用任意形式的序列化数据(客户端缺乏完整的定义),我建议你查看JSON或XML(这两者都可以避免从可能不受信任的来源中剔除泡菜的安全风险)。