Hi dankegut!dankegut hat geschrieben:Kann ich dem Client jetzt sagen, dass er das in eine Datei schreiben soll ?! am besten noch mit dem gleichen dateinamen
Natürlich geht das. Du musst dich nur darum kümmern, dass sich der Inhalt der zu übertragenden Datei nicht beim Übertragen ändert. -- Also keine Windows-Zeilenumbrüche in Linux-Zeilenumbrüche umgewandelt werden. Oder auch dass Sonderzeichen korrekt übertragen werden. Dafür gibt es in der ``xmlrpclib`` den Datentyp ``Binary``.
server.py:
Code: Alles auswählen
#!/usr/bin/env python -O
# -*- coding: utf-8 -*-
"""
******************************************************************************
* Simple XMLRPC-Server
******************************************************************************
"""
import xmlrpclib
from SimpleXMLRPCServer import SimpleXMLRPCServer
KEYFILE = "my_key.xml"
class XmlrpcHandler:
def get_keyfile(self):
"""
Gibt den Inhalt und den Dateinamen der Datei KEYFILE zurück.
"""
f = file(KEYFILE, "rb")
ret_dict = {
"filename": KEYFILE,
"content": xmlrpclib.Binary(f.read())
}
f.close()
return ret_dict
def main():
"""
Hauptprozedur
"""
server = SimpleXMLRPCServer(("localhost", 50505))
server.register_instance(XmlrpcHandler())
print "Der XMLRPC-Server horcht auf http://localhost:50505."
print "Er kann mit STRG+C oder STRG+PAUSE beendet werden."
server.serve_forever()
if __name__ == "__main__":
main()
Code: Alles auswählen
#!/usr/bin/env python -O
# -*- coding: utf-8 -*-
"""
******************************************************************************
* Einfacher XMLRPC-Client
******************************************************************************
"""
import xmlrpclib
def main():
"""
Hauptprozedur
"""
server = xmlrpclib.ServerProxy("http://localhost:50505")
ret_dict = server.get_keyfile()
print "Filename:", ret_dict["filename"]
print "Content:", ret_dict["content"].data
if __name__ == "__main__":
main()
Gerold
Stichworte: binär daten übertragen binary data