[Python-de] Dateien ueber Sockets uebertragen

Alexander 'boesi' Bösecke boesi.josi at gmx.net
Mit Mar 31 11:55:13 CEST 2004


moin

Ich hab mir zu Lernzwecken einen Server geschrieben, bei welchem ein
Client eine beliebige Datei anfordern kann und der Server sendet diese
dann sofern vorhanden. 

Hier erstmal der Quelltext des Servers zum Senden der Datei:

file = open(f_path, 'rb')
while 1:
    data = file.read(1024)
    if not data: break
    self.connection.send(data)

Und hier der Quelltext des Clienten zum empfangen:

recvBytes = 0
while file_size > recvBytes:
    data = sockobj.recv(1024)
    file.write(data)
    recvBytes += len(data)
    print file_size, ' - ', recvBytes

file_size wird vorher vom Server uebertragen und entspricht natuerlich
der Dateigröße

Lokal funktioniert das auch, nur wenn Server und Client auf
unterschiedlichen Rechnern laufen, bekomm ich vom Clienten folgende
Ausgabe:

[...]
17684  -  14336
17684  -  15360
17684  -  16384
17684  -  16669

Dann haengt der Client. Wenn ich den Clienten beende, ist die
uebertragene Datei genau diese 16669 Bytes groß.
Der Server dagegen beendet ganz normal die Uebertragung und wartet auf
die naechste Anforderung.
Bei anderen Dateien sieht das aehnlich aus, es fehlen anscheinend immer
etwas weniger als 1024 Bytes.

Vielen Dank fuer eure Hilfe
boesi
-- 
Ein Wunder muss heute schon ganz schoen              #1671 : icq-intern
wundervoll sein um ein Wunder zu sein,           #73628288 : icq-extern
sonst wuerde man sich ja gar nicht mehr wundern   boesi111 : aim
                 .-==Prof. Dr. Harald Lesch==-.       i171 : reallife