获取错误“;“无法封送无”;尽管在Python中使用XMLRPC时添加了allow_none=True

获取错误“;“无法封送无”;尽管在Python中使用XMLRPC时添加了allow_none=True,python,rpc,xml-rpc,simplexmlrpcserver,Python,Rpc,Xml Rpc,Simplexmlrpcserver,我尝试在Python中使用XMLRPC创建一个简单的下载和上传系统 以下是客户端的代码(将此文件命名为client.py) 下面是侦听器的代码(将此文件命名为listener.py) 如何启动系统? 将两个文件放在同一目录中 执行以下命令 python listener 9000 python侦听器9500 python客户端9000(然后将远程客户端端口设为9500作为输入) python客户端9500(然后将远程客户端端口设为9000作为输入) 文件上传工作正常 但文件下载不起作用 它给了我

我尝试在Python中使用XMLRPC创建一个简单的下载和上传系统

以下是客户端的代码(将此文件命名为client.py)

下面是侦听器的代码(将此文件命名为listener.py)

如何启动系统?

  • 将两个文件放在同一目录中
  • 执行以下命令
  • python listener 9000
  • python侦听器9500
  • python客户端9000(然后将远程客户端端口设为9500作为输入)
  • python客户端9500(然后将远程客户端端口设为9000作为输入)
  • 文件上传工作正常

    但文件下载不起作用

    它给了我以下的错误

    Traceback (most recent call last):
      File "collab_client.py", line 57, in <module>
        mod_file_download(file_name, local_port, remote_proxy, local_proxy)
      File "collab_client.py", line 17, in mod_file_download
        remote_proxy.mod_file_transfer(file_name, local_proxy)
      File "/usr/lib/python2.7/xmlrpclib.py", line 1240, in __call__
        return self.__send(self.__name, args)
      File "/usr/lib/python2.7/xmlrpclib.py", line 1593, in __request
        allow_none=self.__allow_none)
      File "/usr/lib/python2.7/xmlrpclib.py", line 1091, in dumps
        data = m.dumps(params)
      File "/usr/lib/python2.7/xmlrpclib.py", line 638, in dumps
        dump(v, write)
      File "/usr/lib/python2.7/xmlrpclib.py", line 660, in __dump
        f(self, value, write)
      File "/usr/lib/python2.7/xmlrpclib.py", line 762, in dump_instance
        self.dump_struct(value.__dict__, write)
      File "/usr/lib/python2.7/xmlrpclib.py", line 741, in dump_struct
        dump(v, write)
      File "/usr/lib/python2.7/xmlrpclib.py", line 660, in __dump
        f(self, value, write)
      File "/usr/lib/python2.7/xmlrpclib.py", line 762, in dump_instance
        self.dump_struct(value.__dict__, write)
      File "/usr/lib/python2.7/xmlrpclib.py", line 741, in dump_struct
        dump(v, write)
      File "/usr/lib/python2.7/xmlrpclib.py", line 660, in __dump
        f(self, value, write)
      File "/usr/lib/python2.7/xmlrpclib.py", line 720, in dump_array
        dump(v, write)
      File "/usr/lib/python2.7/xmlrpclib.py", line 660, in __dump
        f(self, value, write)
      File "/usr/lib/python2.7/xmlrpclib.py", line 664, in dump_nil
        raise TypeError, "cannot marshal None unless allow_none is enabled"
    TypeError: cannot marshal None unless allow_none is enabled
    
    回溯(最近一次呼叫最后一次):
    文件“collab_client.py”,第57行,在
    mod_file_下载(文件名、本地_端口、远程_代理、本地_代理)
    mod_文件下载中第17行的文件“collab_client.py”
    远程代理.mod文件传输(文件名,本地代理)
    文件“/usr/lib/python2.7/xmlrpclib.py”,第1240行,在__
    返回self.\u发送(self.\u名称,args)
    文件“/usr/lib/python2.7/xmlrpclib.py”,第1593行,在请求中
    允许\无=自身。\允许\无)
    文件“/usr/lib/python2.7/xmlrpclib.py”,第1091行,转储
    数据=m.dumps(参数)
    文件“/usr/lib/python2.7/xmlrpclib.py”,第638行,转储
    转储(v,写入)
    文件“/usr/lib/python2.7/xmlrpclib.py”,第660行,在
    f(自我、价值、写入)
    文件“/usr/lib/python2.7/xmlrpclib.py”,第762行,在dump_实例中
    self.dump\u struct(value.\u dict\u,write)
    文件“/usr/lib/python2.7/xmlrpclib.py”,第741行,位于dump_结构中
    转储(v,写入)
    文件“/usr/lib/python2.7/xmlrpclib.py”,第660行,在
    f(自我、价值、写入)
    文件“/usr/lib/python2.7/xmlrpclib.py”,第762行,在dump_实例中
    self.dump\u struct(value.\u dict\u,write)
    文件“/usr/lib/python2.7/xmlrpclib.py”,第741行,位于dump_结构中
    转储(v,写入)
    文件“/usr/lib/python2.7/xmlrpclib.py”,第660行,在
    f(自我、价值、写入)
    文件“/usr/lib/python2.7/xmlrpclib.py”,第720行,在dump_数组中
    转储(v,写入)
    文件“/usr/lib/python2.7/xmlrpclib.py”,第660行,在
    f(自我、价值、写入)
    文件“/usr/lib/python2.7/xmlrpclib.py”,第664行,在dump_nil中
    raise TypeError,“除非启用了allow\u None,否则无法封送None”
    TypeError:除非启用了allow\u None,否则无法封送None
    
    但是我已经在侦听器文件中给出了选项
    allow\u none=True


    我哪里做错了?我头痛了很久才发现。似乎无法发送或发送连接详细信息。在函数
    mod_file_transfer
    中,我试图将客户机连接详细信息作为对象发送(以便服务器知道必须将文件发送给谁),这导致了错误


    我只是简单地将客户端连接细节作为字符串发送,结果成功了。谢谢我

    有人吗?
    import sys
    import xmlrpclib
    from SimpleXMLRPCServer import SimpleXMLRPCServer
    
    def mod_file_transfer(file_name, requestor_proxy):
        """Initiating the file transfer"""
    
        print "[mod_file_transfer fired]"
    
        file_path = "./" + file_name
    
        print requestor_proxy
    
        with open(file_path, "rb") as handle:
            bin_data = xmlrpclib.Binary(handle.read())
    
        # Connecting to requestor's server
        requestor_proxy.mod_file_download_receive(bin_data, file_name)
    
        return True
    
    def mod_file_receive(bin_data, file_name):
        """Used to receive a file upon a request of an upload"""
    
        print "[mod_file_receive fired]"
    
        new_file_name = "./" + file_name
        with open(new_file_name, "wb") as handle:
            handle.write(bin_data.data)
            return True
    
    def mod_file_download_receive(bin_data, file_name):
        """Used to receive a file upon request of a download"""
    
        print "[mod_file_download_receive fired]"
    
        new_file_name = "./" + file_name + str(1)
        with open(new_file_name, "wb") as handle:
            handle.write(bin_data.data)
            return True
    
    ##MAIN MODULE STARTS HERE##
    
    local_port = sys.argv[1]
    
    # Declared an XMLRPC server
    node = SimpleXMLRPCServer(("localhost", int(local_port)), logRequests=True, allow_none=True)
    print "Listening on port %s..." % local_port
    
    # Registered a list of functions
    node.register_function(mod_file_transfer, 'mod_file_transfer')
    node.register_function(mod_file_receive, 'mod_file_receive')
    node.register_function(mod_file_download_receive, 'mod_file_download_receive')
    
    # Initialized the XMLRPC server
    node.serve_forever()
    
    Traceback (most recent call last):
      File "collab_client.py", line 57, in <module>
        mod_file_download(file_name, local_port, remote_proxy, local_proxy)
      File "collab_client.py", line 17, in mod_file_download
        remote_proxy.mod_file_transfer(file_name, local_proxy)
      File "/usr/lib/python2.7/xmlrpclib.py", line 1240, in __call__
        return self.__send(self.__name, args)
      File "/usr/lib/python2.7/xmlrpclib.py", line 1593, in __request
        allow_none=self.__allow_none)
      File "/usr/lib/python2.7/xmlrpclib.py", line 1091, in dumps
        data = m.dumps(params)
      File "/usr/lib/python2.7/xmlrpclib.py", line 638, in dumps
        dump(v, write)
      File "/usr/lib/python2.7/xmlrpclib.py", line 660, in __dump
        f(self, value, write)
      File "/usr/lib/python2.7/xmlrpclib.py", line 762, in dump_instance
        self.dump_struct(value.__dict__, write)
      File "/usr/lib/python2.7/xmlrpclib.py", line 741, in dump_struct
        dump(v, write)
      File "/usr/lib/python2.7/xmlrpclib.py", line 660, in __dump
        f(self, value, write)
      File "/usr/lib/python2.7/xmlrpclib.py", line 762, in dump_instance
        self.dump_struct(value.__dict__, write)
      File "/usr/lib/python2.7/xmlrpclib.py", line 741, in dump_struct
        dump(v, write)
      File "/usr/lib/python2.7/xmlrpclib.py", line 660, in __dump
        f(self, value, write)
      File "/usr/lib/python2.7/xmlrpclib.py", line 720, in dump_array
        dump(v, write)
      File "/usr/lib/python2.7/xmlrpclib.py", line 660, in __dump
        f(self, value, write)
      File "/usr/lib/python2.7/xmlrpclib.py", line 664, in dump_nil
        raise TypeError, "cannot marshal None unless allow_none is enabled"
    TypeError: cannot marshal None unless allow_none is enabled