[Python-de] Re: Dateien ueber Sockets uebertragen

Holger Duerer python-lists at duerer-sinclair.de
Don Apr 1 18:09:45 CEST 2004


>>>>> "Alexander" == Alexander 'boesi' Bösecke <boesi.josi at gmx.net> writes:

  [...]

    Alexander> Ich hab mal die Kommunikation zwischen Client und
    Alexander> Server mit Analyzer (ein Sniffer) belauscht.

    Alexander> Der Server verwendet folgenden Code zum Senden:

    Alexander>         self.connection.send('OK')
    Alexander>         self.connection.send(cPickle.dumps(file_size))
    Alexander>         sendBytes = 0
    Alexander>         while 1:
    Alexander>             data = file.read(self.BlockSize)
    Alexander>             if not data: break
    Alexander>             self.connection.send(data)
    Alexander>             sendBytes += len(data)
    Alexander>             print '%d - %d' % (file_size, sendBytes)

    Alexander> Das erste send erzeugt ein eigenes TCP-Packet, so wie's
    Alexander> sein soll.  Das TCP-Packet des zweiten send dagegen
    Alexander> vermischt mit dem des dritten send.

    Alexander> Wenn ich nach dem zweiten send ein time.sleep(0.2)
    Alexander> einfuege, funktioniert alles wie gewollt.

    Alexander> Wer funkt hier dem Server dazwischen und packt
    Alexander> (wahllos?) Packete zusammen? Ich kann ja schlecht nach
    Alexander> jedem send eine Pause von 200ms (100ms sind zuwenig)
    Alexander> einlegen.  System ist hier WinXP, aber das soll
    Alexander> natuerlich alles plattformunabhaengig funktionieren.

I glaube nicht, dass Du Dich darauf verlassen kannst, dass die
Packetstueckelung, die Du an einem Ende schreibst, am anderen Ende so
wieder rauskommt.  (IIRC, duerfen Router unterwegs ggf. Pakete
aufteilen etc., wenn die so nicht uebertragen werden koennen).

TCP ist ein Datenstrohm, da musst Du schon selber im Datenprotokoll
fuer eine Datenbegrenzung sorgen.

Wg. des 0.2 sek. wartens: Da gibt es eine Option, den
Nagle-Algorithmus auszuschalten, damit sollte dieses Zeitinterval
kuerzer werden.  Aber wie gesagt, verlassen darfst Du Dich da nicht
drauf.

        Holger