我需要nc
以一种奇怪的方式使用,我希望服务器首先发送文件,然后接收文件,然后重复此过程。我希望服务器的每个实例在几秒钟后关闭。我怎样才能在脚本中做到这一点?我已经有一个可以与服务器交互的客户端。
答案1
答案2
使用 bash 超时:
$ timeout 3s nc -l -p 2000
答案3
由于文档:The -w flag has no effect on the -l option, i.e. nc will listen forever for a connection, with or without the -w flag
我试过了nc
ncat
socat
,没有人可以为服务器模式设置超时。
据我所知,只能在服务器模式下busybox nc
遵循选项。-w
所以你必须下载带CONFIG_NC_SERVER=y
选项编译的busybox,或者自己编译。
这样你就可以
$busybox nc -w 10 -l -p 9999
但我的系统的busybox没有使用CONFIG_NC_SERVER=y
选项编译,我不想编译它。所以我使用这个解决方案:
portnum=9999
(sleep 10 ;echo "T" | nc -w 1 127.0.0.1 $portnum) | nc -N -l -p $portnum
10秒后,发送“T”到localhost:9999
完整的代码是
#!/bin/sh
portnum=9999
testmsg="Hello_World"
if [ "$( (sleep 10 ;echo "T" | nc -w 1 127.0.0.1 $portnum) | nc -N -l -p $portnum )" = $testmsg ]; then
echo "Test pass"
else
echo "Test not pass"
fi
如果服务器Hello_World
在 10 秒内收到,它将打印Test pass
。否则打印Test not pass
您可以尝试打开另一个控制台,然后输入
echo "Hello_World" | nc -w 1 127.0.0.1 9999
来测试它。