[Python-de] Dateien ueber Sockets uebertragen

Alexander 'boesi' Bösecke boetemp at gmx.net
Don Apr 1 12:11:02 CEST 2004


Hi

Am 31.03.2004 14:41:08 schrieb Hartmut Goebel:

> > Und warum nicht an die Liste? Ist dieses Problem so speziell dass es die
> > Allgemeinheit nicht interessiert?
> 
> Ging an die Liste un an dich.

Oh tut mir leid, hatte das CC uebersehen. Aber wieso hab ich dann die
Mail nicht auch ueber die Liste bekommen? *kopfkratz*
Ich sende das jetzt mal per CC noch an die Liste, ich glaub da
funktioniert was nicht ganz so wie es soll.

> Kann es sein, dass Du vor der Schleife versehentlich schon etwas aus dem 
> Socket liest, das Dir dann natürlich fehlt? Hast Du den Inhalt der 
> geschriebenen Datei verglichen, wo die Daten fehlen?

Ich hab Analyzer (ein Sniffer) die Kommunikation belauschen lassen.

Der Server nutzt folgenden Code zum Senden:
    self.connection.send('OK')                    
    self.connection.send(cPickle.dumps(file_size))
    sendBytes = 0
    while 1:
        data = file.read(self.BlockSize)
        if not data: break
        self.connection.send(data)
        sendBytes += len(data)
        print '%d - %d' % (file_size, sendBytes)

"self.connection.send('OK')" erzeugt ein eigenes TCP-Packet so wie's
sein soll.
Problem ist, dass "self.connection.send(cPickle.dumps(file_size))" kein
eigenes TCP-Packet erzeugt, stattdessen werden an das Packet die Daten
vom darauffolgenden "self.connection.send(data)" angehängt. Und das sind
auch genau die Daten die am Ende fehlen.
Den Clienten scheinen beim "file_size = cPickle.loads(self.sockobj.recv
(self.BlockSize))" die überzähligen Daten jedenfalls nicht zu stören,
der wirft die mal ebend weg.

Folgendes hilft auch nicht:
        temp = cPickle.dumps(file_size)
        self.connection.send(temp)
Dieses send(temp) und das nachfolgende send(data) werden irgendwie
miteinander vermanscht.


Wie schon gesagt, lokal funktioniert alles, leider scheint Analyzer kein
localhost zu kennen.

thx & cu 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