File transfer mit XML RPC Server und Client

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
grimbo
User
Beiträge: 4
Registriert: Dienstag 21. August 2012, 11:16

Hallo Zusammen,

Ich bin relativ neu bei Python und ganz neu hier im Forum.
Mein Ziel ist eine CSV Datei von einem Linux Rechner mit XML RPC auf einen Windows 7 zu kopieren.
Das ganze läuft über ein lokales Netzwerk mit Router dazwischen.

Ich kann meinen Client ( auf Win7 PC) mit meinem Server ( auf Linux) verbinden und auch mit dem Client
Funktionen auf dem Server ausführen, bzw. Strings hin und her übertragen.

Was nicht funktioniert ist ganze Dateien zu übertragen! Dabei erhalte ich immer einen Socket Error :
" socket.error: [Errno 10061] Es konnte keine Verbindung hergestellt werden, da der Zielcomputer die Verbindung verweigerte "
Firewalls sind deaktiviert.

Wo liegt mein Fehler ?
Client:

Code: Alles auswählen

 
def get_csv(self, data = None):
            server = xmlrpclib.ServerProxy('http://10.70.20.31:9123/RPC2')
            file_name = beliebiger dateiname
            fetched_file = open(Pfad und dateiname auf win7 PC, 'wb')
            content = server.send_file(file_name).data # send_file() ist die funktion auf dem server   
            fetched_file.write(content)
            fetched_file.close()
Server:

Code: Alles auswählen


class RequestHandler(SimpleXMLRPCRequestHandler):
            rpc_paths = ('/RPC2',) # alle Pfade verfuegbar 
server = SimpleXMLRPCServer(("10.70.20.31",9123),requestHandler=RequestHandler, logRequests = False)
server.register_introspection_functions()
def send_file(filename):
            file = open(jh.ResPath('TNC:\\powerlog\\' + filename ), "rb")
            return xmlrpclib.Binary(file.read())
            file.close()
server.register_function(send_file)
jh.ResPath - Nicht verwirren lassen, ist eine notwendige Pfadangabe, da auf eine m speziellen IndustriePC gearbeitet wird.
Danke Schonmal!

Gruß

Grimbo
Zuletzt geändert von grimbo am Dienstag 21. August 2012, 12:16, insgesamt 3-mal geändert.
deets

Zuerst fang bitte mal an lauffaehigen Code zu posten - nicht nur eine Paraphrasierung dessen was irgendwie laufen soll. Denn im Client ist zB von ".data" die Rede, das sehe ich aber nicht in deinem Server.

Dann solltest du das with-statement zum oeffnen, einlesen und schliessen von Files benutzen.

Last but not least: ich halte die socket-Fehlermeldung fuer nicht XMLRPC-bedingt - das klingt nach einem anderen, generelleren Netzwerk Problem.
grimbo
User
Beiträge: 4
Registriert: Dienstag 21. August 2012, 11:16

Danke für die schnelle Antwort!

"return xmlrpclib.Binary(file.read())" auf der Serverseite gibt mir den Inhalt der Datei zurück , den ich beim Client mit ".data" abhole.

Das habe ich mir auch schon gedacht, da bei einer direkten Verbindung alles einwandfrei funktioniert, wenn ich nicht übers
Netzwerk und somit den Router gehe. Also wenn ich zum Beispiel die IP-Adressen beider Rechner auf 192.168.0.XXX stelle ...
deets

ah, stimmt - das ist ja ein Objekt, und da muss noch .data drauf gerufen werden. Das war mir entfallen.

Wenn's sonst klappt, dann ist der Router schuld, oder wer auch immer im Netzwerk.
grimbo
User
Beiträge: 4
Registriert: Dienstag 21. August 2012, 11:16

Das befürchte ich ebenfalls, auch wenn laut Netzwerkadministrator nichts stören kann.
Ich habe vermutet, dass ich eventuell ein paar besonderheiten von XML RPC nicht berücksichtigt habe...
grimbo
User
Beiträge: 4
Registriert: Dienstag 21. August 2012, 11:16

Problem gelöst ,die IP-Adresse für den Client habe ich in einer Combobox hinterlegt, leider mit einem Punkt zu viel.
Der Punkt muss nach dem Test mit direkter Verbindung hinzugekommen sein ... Sorry und Danke!
:oops:
Antworten