获取错误“;“无法封送无”;尽管在Python中使用XMLRPC时添加了allow_none=True
我尝试在Python中使用XMLRPC创建一个简单的下载和上传系统 以下是客户端的代码(将此文件命名为client.py) 下面是侦听器的代码(将此文件命名为listener.py) 如何启动系统?获取错误“;“无法封送无”;尽管在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作为输入) 文件上传工作正常 但文件下载不起作用 它给了我
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