我知道netcat通常提出的“ wait-> stop”设计的缺点:
server$ cat test.dat | nc -q 10 -l -p 7878
client$ nc -w 10 remotehost 7878 > out.dat
(这是不可靠的:没有仪表可以等待多长时间,总有可能出现网络瓶颈一秒钟以上。-另一件事->如果您立即知道数据已传输并开始处理它们,为什么还要等待10秒!)
我想要解决方案,并提供可靠且不错的tcp流关闭功能。
我找到了socat,并按如下所述进行关闭man socat
:
当其中一个流有效到达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中有很多选项)
对于追随者,第二个示例(“服务器接收文件”)是“典型”客户端将文件发送到服务器...而且较新版本的netcat具有“ -N -q 0”选项,这将导致更可靠转移比旧的“等待和希望”机制:)
—
rogerdpack 18/09/28