Thread Fehlerfreie Übertragung einer Datei (74 answers)
Opened by ITobiI at 2015-09-15 17:14

topeg
 2015-09-20 12:10
#182272 #182272
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Du brauchst bei der Ausgabe nichts zu zählen:
Code (perl): (dl )
$socket->send($_) for (@data);

Das macht Perl schon alles für dich.

Aber Zeilen enthalten nicht immer gleich viele Zeichen. Und z.B. Bilder haben gar keine "Zeilen" wie sie perl erkennen kann.

Weiterhin:

UDP und TCP setzen normalerweise auf "IP" auf das "Internet-Protokoll". Das ist ein paketorientiertes Protokoll. Wie auch UDP und TCP. Diese stecken ihre eigenen Pakete in IP-Pakete. Wenn du damit Daten versendest solltest du entweder den Protokollen überlassen die optimale Größe eines Datensatzes zu bestimmen oder den Protokollen die Optimale Datensatz Größe übermitteln. Ansonsten bekommst du "ungefüllte" Pakete, die mehr Overhead haben als nötig.


Du kannst Blöcke lesen (ungetestet):

Code (perl): (dl )
1
2
3
4
5
6
7
my @data
open(my $fh, '<:raw', 'test.txt') or die("ERROR OPEN test.txt ($!)\n");
my $block;
while(read($fh,$block,1024)) {
  push(@data,$block);
}
close($fh);


Damit stellst du sicher das jeder gesendete Datensatz gleich groß ist. Weiterhin kannst du so auch die Befüllung der IP-Pakete optimieren.

Gegenüber dem "readline" ist das hier zu bevorzugen.

View full thread Fehlerfreie Übertragung einer Datei