如何使用xmlrpclib将client_address公开给所有方法?

时间:2009-06-11 00:34:23

标签: python xmlrpclib

我为客户端的ip ip创建了一些SimpleXMLRPCServer。

我试试这个:

服务器

导入xmlrpclib

从SimpleXMLRPCServer导入SimpleXMLRPCServer

server = SimpleXMLRPCServer((“localhost”,8000))

def MyIp():     返回“你的ip是:%s”%server.socket.getpeername()

server.register_function(MYIP)

server.serve_forever()

客户端

导入xmlrpclib

se = xmlrpclib.Server(“http://localhost:8000”)

打印se.MyIp()

错误

xmlrpclib.Fault ::(107,'传输端点未连接')“>

如何使client_address对所有函数可见?

1 个答案:

答案 0 :(得分:3)

如果您希望例如将client_address作为第一个参数传递给每个函数,则可以将SimpleXMLRPCRequestHandler子类化(在实例化SimpleXMLRPCServer时将子类作为处理程序传递)并覆盖_dispatch(以前置{ {1}}到params元组,然后将其余部分委托给self.client_address)。如果这种方法没问题并且您想查看代码,请询问!

我不确定你如何安全地使用除了“使SimpleXMLRPCRequestHandler._dispatch可见”的函数参数之外的任何东西 - 没有client_address作为一个简单的名称,全局或其他,只有请求处理程序类的每个实例的client_address(以及诸如将其复制到全局变量之类的hack确实确实确实令人讨厌 - 并且在线程下不安全等等。)