Voglio scrivere il codice Python per inviare un file dal client al server. il server deve salvare il file inviato dal client. Ma il mio codice ha alcuni bug che non riesco a risolvere. Qui di seguito è il mio codice del server:Invia file da client a server utilizzando XMLRPC?
# server.py
from SimpleXMLRPCServer import SimpleXMLRPCServer
import os
server = SimpleXMLRPCServer(('localhost', 9000))
def save_data(data):
handle = open("x123.dat", "wb")
handle.write(data)
handle.close()
server.register_function(save_data, 'save_data')
server.serve_forever()
E il codice del client:
# client.py
import sys, xmlrpclib
proxy = xmlrpclib.Server('http://localhost:9000')
handle = open(sys.argv[1], "rb")
proxy.save_data(handle.read())
handle.close()
Ma poi ho eseguito il mio codice, il cliente restituisce il seguente errore (questo è su Windows):
Traceback (most recent call last):
File "client.py", line 6, in <module> proxy.save_data(handle.read())
File "c:\python27\lib\xmlrpclib.py", line 1224, in __call__
return self.__send(self.__name, args)
File "c:\python27\lib\xmlrpclib.py", line 1575, in __request
verbose=self.__verbose
File "c:\python27\lib\xmlrpclib.py", line 1264, in request
return self.single_request(host, handler, request_body, verbose)
File "c:\python27\lib\xmlrpclib.py", line 1297, in single_request
return self.parse_response(response)
File "c:\python27\lib\xmlrpclib.py", line 1473, in parse_response
return u.close()
File "c:\python27\lib\xmlrpclib.py", line 793, in close
raise Fault(**self._stack[0])
xmlrpclib.Fault: <Fault 1: "<class 'xml.parsers.expat.ExpatError'>:not well-formed (invalid token): line 7, column 1">
ho alcune domande:
Come risolvere il bug precedente?
Il mio codice deve talvolta trasferire alcuni file di grandi dimensioni. Dato che il mio metodo è così semplice, dubito che sia efficiente per lo spostamento di big data. Qualcuno potrebbe suggerire un metodo migliore per spostare file di grandi dimensioni? (Naturalmente è meglio usare XMLRPC su Python)