我创建了一些用于检查客户端IP的SimpleXMLRPCServer。

我尝试这样:

服务器

导入xmlrpclib

从SimpleXMLRPCServer导入SimpleXMLRPCServer

服务器= 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对所有功能可见?

最佳答案

例如,如果您想将client_address作为每个函数的第一个参数传递,则可以将SimpleXMLRPCRequestHandler子类化(在实例化SimpleXMLRPCServer时将子类作为处理程序传递)并覆盖_dispatch(将self.client_address放在params元组和然后将其余内容委托给SimpleXMLRPCRequestHandler._dispatch)。如果这种方法还可以,并且您想查看代码,请询问!

我不确定您如何安全地使用除函数参数之外的任何东西来“使client_address可见”-根本没有client_address作为全局名称或其他形式的裸名,每个实例的self.client_address请求处理程序类(以及将其复制到全局变量之类的黑客确实确实感到很讨厌-并且在线程化下是不安全的,等等)。

关于python - 如何使用xmlrpclib将client_address公开给所有方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/978784/

10-12 23:17