Saya menyadari kekurangan dari desain "wait-> stop", yang biasanya diusulkan dengan netcat:
server$ cat test.dat | nc -q 10 -l -p 7878
client$ nc -w 10 remotehost 7878 > out.dat
(Ini tidak dapat diandalkan: tidak ada meter berapa lama Anda menunggu selalu ada kemungkinan kemacetan jaringan untuk satu detik lebih lama. - Satu hal lagi -> mengapa menunggu 10 detik jika Anda dapat segera mengetahui bahwa data ditransfer dan mulai memprosesnya!)
Saya ingin solusi, dengan penutupan aliran tcp yang andal dan menyenangkan .
Saya telah menemukan socat, dengan penutup seperti yang dijelaskan dalam man socat
:
Ketika salah satu aliran secara efektif mencapai EOF, fase penutupan dimulai. Socat mentransfer kondisi EOF ke aliran lain, yaitu mencoba mematikan hanya aliran tulisnya, memberikannya kesempatan untuk mengakhiri dengan anggun.
Saya menemukan perintah berikut berfungsi:
Server mengirim file:
server$ socat -u FILE:test.dat TCP-LISTEN:9876,reuseaddr
client$ socat -u TCP:127.0.0.1:9876 OPEN:out.dat,creat
Server menerima file:
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
Apakah ini dapat diandalkan? Bisakah ini diperbaiki? (Sudahkah saya menggunakan opsi yang tepat? Apakah ada opsi yang lebih baik untuk setup? - Ada begitu banyak dari mereka dengan socat)