Je suis conscient des inconvénients de la conception "wait-> stop", qui est généralement proposée avec netcat:
server$ cat test.dat | nc -q 10 -l -p 7878
client$ nc -w 10 remotehost 7878 > out.dat
(Ce n'est pas fiable: pas de compteur combien de temps vous attendez, il est toujours possible qu'il y ait un goulot d'étranglement du réseau pendant une seconde de plus. - Autre chose -> pourquoi attendre 10 secondes si vous pouvez savoir immédiatement que les données sont transférées et commencer à les traiter!)
Je voudrais une solution, avec une fermeture de flux tcp fiable et agréable .
J'ai trouvé socat, avec fermeture comme décrit dans man socat
:
Lorsque l'un des flux atteint effectivement l'EOF, la phase de fermeture commence. Socat transfère la condition EOF à l'autre flux, c'est-à-dire qu'il essaie de ne fermer que son flux d'écriture, ce qui lui donne une chance de se terminer correctement.
J'ai trouvé que les commandes suivantes fonctionnaient:
Fichier d'envoi du serveur:
server$ socat -u FILE:test.dat TCP-LISTEN:9876,reuseaddr
client$ socat -u TCP:127.0.0.1:9876 OPEN:out.dat,creat
Serveur recevant le fichier:
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
Est-ce fiable? Peut-il être amélioré? (Ai-je utilisé les bonnes options? Y a-t-il de meilleures options à configurer? - Il y en a tellement avec socat)