Ich bin mir der Nachteile des "wait-> stop" -Designs bewusst, die normalerweise mit netcat vorgeschlagen werden:
server$ cat test.dat | nc -q 10 -l -p 7878
client$ nc -w 10 remotehost 7878 > out.dat
(Es ist nicht zuverlässig: Kein Zähler, wie lange Sie warten, es ist immer möglich, dass eine Sekunde lang ein Netzwerkegpass aufgetreten ist. - Eine andere Sache -> Warum 10 Sekunden warten, wenn Sie sofort wissen, dass Daten übertragen werden, und mit der Verarbeitung beginnen!)
Ich hätte gerne eine Lösung mit einem zuverlässigen und netten Schließen des TCP-Streams .
Ich habe socat gefunden, mit dem Schließen wie beschrieben in man socat
:
Wenn einer der Streams EOF effektiv erreicht, beginnt die Abschlussphase. Socat überträgt die EOF-Bedingung auf den anderen Stream, dh es wird versucht, nur seinen Schreib-Stream herunterzufahren, sodass er ordnungsgemäß beendet werden kann.
Ich fand folgende Befehle funktionierend:
Server-Sende-Datei:
server$ socat -u FILE:test.dat TCP-LISTEN:9876,reuseaddr
client$ socat -u TCP:127.0.0.1:9876 OPEN:out.dat,creat
Server empfängt Datei:
server$ socat -u TCP-LISTEN:9876,reuseaddr OPEN:out.txt,creat && cat out.txt
client$ socat -u FILE:test.txt TCP:127.0.0.1:9876
Ist es zuverlässig? Kann es verbessert werden? (Habe ich die richtigen Optionen verwendet? Gibt es bessere Optionen zum Einrichten? - Es gibt so viele davon mit socat)