私は、通常netcatで提案されている「待機->停止」設計の欠点を認識しています。
server$ cat test.dat | nc -q 10 -l -p 7878
client$ nc -w 10 remotehost 7878 > out.dat
(信頼性はありません:1秒以上ネットワークのボトルネックが発生した可能性があるので、どれほど長く待つこともできません。-別のこと->データが転送されたことがすぐにわかり、処理を開始できる場合は、10秒待つ必要があります。)
信頼性が高く素晴らしいtcpストリームを閉じるソリューションを希望します。
私はsocatを見つけましたman socat
。
ストリームの1つが事実上EOFに到達すると、クローズフェーズが始まります。SocatはEOF状態を他のストリームに転送します。つまり、書き込みストリームのみをシャットダウンしようとし、正常に終了する機会を与えます。
次のコマンドが機能していることがわかりました。
サーバー送信ファイル:
server$ socat -u FILE:test.dat TCP-LISTEN:9876,reuseaddr
client$ socat -u TCP:127.0.0.1:9876 OPEN:out.dat,creat
サーバー受信ファイル:
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
信頼できますか?改善できますか?(私は正しいオプションを使用しましたか?設定するためのより良いオプションはありますか?-socatにはそれらの多くがあります)