Come esporre client_address a tutti i metodi, usando xmlrpclib?
Domanda
creo poco SimpleXMLRPCServer per il controllo IP del client.
provo questo:
Server
import xmlrpclib
da SimpleXMLRPCServer import SimpleXMLRPCServer
server = SimpleXMLRPCServer (( "localhost", 8000))
def MyIP (): return "Il tuo IP è:% s" % server.socket.getpeername ()
server.register_function (MyIP)
server.serve_forever ()
Client
import xmlrpclib
SE = xmlrpclib.Server ( " http: // localhost: 8000 ")
stampa se.MyIp ()
Errore
xmlrpclib.Fault:: (107, 'Trasporti endpoint non è collegato') ">
Come fare client_address visibile a tutte le funzioni?
Soluzione
Se si desidera ad esempio per passare client_address
come primo argomento ad ogni funzione, si potrebbe creare una sottoclasse SimpleXMLRPCRequestHandler (passaggio il vostro sottoclasse come il gestore quando si crea un'istanza di SimpleXMLRPCServer) e sovrascrivere _dispatch
(anteporre self.client_address
alla tupla params e poi delegare la riposo per SimpleXMLRPCRequestHandler._dispatch
). Se questo approccio è OK e si desidera visualizzare il codice, basta chiedere!
Non sono sicuro di come si sarebbe utilizzare in modo sicuro qualsiasi cosa, ma gli argomenti della funzione di "fare client_address
visibile" - non c'è client_address
come nome nuda, globale o in altro modo, c'è solo l'self.client_address
di ogni istanza del gestore di richieste di classe (e hack quali la copia di esso a un variabili globali si sentono davvero schifo davvero - e non sicuri sotto la filettatura, ecc ecc).