我的服务器上有一个文件,其中包含以空格分散的 HL7 消息。下面的例子。我想在连续循环中一次发送其中一条消息,直到使用 ctrl+c 停止脚本。我很陌生,netcat
但是当我尝试直接使用 netcat 时,nc -l 10004
我得到:
ncat: bind to :::10004: Address already in use. QUITTING.
设备上已有一个 Mirth 应用程序正在侦听此端口。如果这是唯一的方法,我可以在另一台设备上运行命令,将其完全发送到此设备,但我需要使用发送到 IP 的帮助netcat
,并一次发送一条消息,并在它们之间有一个时间间隔。
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