私のサーバーには、空白になっているHL7メッセージを含むファイルがあります。以下の例ctrl + cを使用してスクリプトが停止するまで、連続ループで一度にこれらのメッセージの1つを送信したいと思います。私はこれに慣れていませんが、netcat
netcatを直接使用しようとすると、次のような結果がnc -l 10004
得られます。
ncat: bind to :::10004: Address already in use. QUITTING.
このポートを受信するデバイスにはすでにMirthアプリケーションがあります。これが唯一の方法であれば、他のデバイスからコマンドを実行してこのデバイスに正確に送信できますが、IPに送信を使用して間隔を空けてnetcat
一度に1つずつメッセージを送信するのに役立ちます。
MSH....
.......
.......
MSH....
.......
MSH....
.......
.......
.......
私が抽出するファイルには複数行のメッセージがありますが、改行で区切られています。 (空間)
ベストアンサー1
Mirthアプリケーションがすでにポート10004でリッスンしている場合、実際にはnetcat
同じポートでリッスンできません(この-l
フラグは聞く)。おそらく、ポートを聞くのではなく、ポートに書き込みをしたいかもしれません。
# Connect once and write many messages
( while :; do echo MSH....; sleep 3; done ) | nc -vvv localhost 10004
または
# Connect for each message
( while :; do echo MSH.... | nc -vvv localhost 10004; sleep 3; done )
さまざまな実装があることに注意してくださいnetcat
。各実装は、異なるフラグのサブセットを処理するようです。
あなたの質問に関する新しい情報に基づいて考えられる別の解決策は次のとおりです。
MESG=
while IFS= read -r LINE || test -n "$MESG"
do
if test -n "$LINE"
then
# Build the message block
test -z "$MESG" && MESG="$LINE" || MESG=$(printf "%s\n%s" "$MESG" "$LINE")
continue
fi
# Send the message block to the service
echo "$MESG" | nc -vvv localhost 10004
MESG=
sleep 3
done < /path/to/your/messagefile.txt