nc
奇妙な方法で使用する必要があります。サーバーは最初にファイルを送信してからファイルを受け取り、その後プロセスを繰り返すことを望みます。数秒後にサーバーの各インスタンスをシャットダウンしたいと思います。スクリプトでこれをどのように実行できますか?サーバーと対話できるクライアントが既に存在します。
答え1
一部のnetcat実装にはタイムアウトオプションがあります。 ~のため一つ私のシステムでは-w
。
$ nc -l -p 2000 -w 5
ポート2000でリッスンし、そのポートで接続が試みられない限り、5秒以内に終了します。
答え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
それをテストするため。