2

我创建了一个小的 SimpleXMLRPCServer 来检查客户端的 ip。

我试试这个:

服务器

导入 xmlrpclib

从 SimpleXMLRPCServer 导入 SimpleXMLRPCServer

服务器 = SimpleXMLRPCServer(("localhost", 8000))

def MyIp(): return "Your ip is: %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?

4

1 回答 1

3

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

我不确定你如何安全地使用除了函数参数之外的任何东西来“使client_address可见”——没有client_address一个裸名,全局或其他,只有self.client_address请求处理程序类的每个实例(以及诸如将它复制到全局变量确实感觉糟糕——并且在线程等下不安全等等)。

于 2009-06-11T01:15:31.323 回答