无法取消

时间:2017-10-23 23:40:15

标签: python python-3.x sockets pickle

我正在尝试取消通过套接字发送的对象

我的服务器有这个类

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对象中。所以它应该工作。右??

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:3)

酸洗处理函数和类(通过一些样板)转移他们的限定名称,以便查看unpickling。它使得得到的泡菜小得多,但由于它不会传递关于它们的任何东西,你所尝试的东西将无法工作。您必须在同一个限定名称下的unpickling端具有引用的类,否则它将无效。

如果你想使用任意形式的序列化数据(客户端缺乏完整的定义),我建议你查看JSON或XML(这两者都可以避免从可能不受信任的来源中剔除泡菜的安全风险)。