bash-ncat/nc/netcat连接赢得';t关闭/保持打开的时间过长
我使用的是bash-ncat/nc/netcat连接赢得';t关闭/保持打开的时间过长,bash,client-server,netcat,Bash,Client Server,Netcat,我使用的是ubuntu18.04lts和bash4.4.20 我正在尝试创建一个小守护进程来调度线程之间的数据传输 在服务器上,我正在执行以下操作: ncat -l 2001 -k -c 'xargs -n1 ./atc-worker.sh' echo "totally-legit-login-token" | nc 127.0.0.1 2001 -w 1 在客户机上,我正在这样做: ncat -l 2001 -k -c 'xargs -n1 ./atc-worker.sh' echo "
ubuntu18.04lts
和bash4.4.20
我正在尝试创建一个小守护进程来调度线程之间的数据传输
在服务器上,我正在执行以下操作:
ncat -l 2001 -k -c 'xargs -n1 ./atc-worker.sh'
echo "totally-legit-login-token" | nc 127.0.0.1 2001 -w 1
在客户机上,我正在这样做:
ncat -l 2001 -k -c 'xargs -n1 ./atc-worker.sh'
echo "totally-legit-login-token" | nc 127.0.0.1 2001 -w 1
而且效果很好
以下是答复:
LaunchCode=1589323120.957093305 = Now=1589323120.957093305 = URL=https://totally-legit-url.com/ = AuthToken=totally-legit-auth-token = LastID=167
当服务器收到来自客户端的请求时,它调用我的小atc worker.sh
脚本。服务器吐出一行文本,然后返回业务,为其他客户端提供服务
由于使用了-k
选项,服务器将持续侦听。多个客户端可以同时连接。唯一的问题是,我无法以编程方式结束连接。我需要服务器上的守护进程-k
功能来回答客户机的请求,但我需要客户机在收到响应后停止侦听,继续他们的其他工作
是否有一个EOF信号/字符可以从我的atc worker.sh
脚本发送,它会告诉客户端的nc
断开连接
在客户端上,我使用-w1
选项告诉客户端连接不超过一秒钟
但是这个-w1
选项有一些缺点
atc worker.sh
有一种机制,可以在存在锁文件时等待将其删除。如果该锁文件在那里的时间超过一秒钟,则连接将在客户端接收其响应之前关闭atc worker.sh
脚本可以发送一个魔术字符集来终止连接。问题解决了curl
将是一个合适的选择,而不是nc
?但这并不能解决我对能够对付坏演员的担忧。也许这是两个不同的问题?客户端在收到应答后立即关闭连接,而服务器端则处理将使用所选客户端的坏角色expect
?我现在正在调查提前谢谢 好的。经过大量的挖掘,我发现其他人也有类似的问题。以下是他的答案的链接 原始问题: 原始答复: 谢谢@Unyxos 我修改了我的守护进程,以便在完成时发送“ENDRESPONSE”行,即使它没有断开连接。我修改了客户端以查找“ENDRESPONSE”行。当客户端收到线路时,它会使用@Unyxos在下面的回答中使用的逻辑断开连接 以下是他简单而优雅的回答:
终于找到了一种工作方式(也许不是最好的,但至少它完美地完成了我想要的:D) 在所有函数完成后,我发送一条“ENDRESPONSE”消息,并在我的客户端上测试是否有此消息:
function sendMessage {
while read line; do
if [[ $line == "ENDRESPONSE" ]]; then
break
else
echo $line
fi
done < <(netcat "$ipAddress" "$port" <<< "$*")
}
函数发送消息{
边读边做
如果[[$line==“ENDRESPONSE”];则
打破
其他的
回音$线
fi
完成<好的。经过大量挖掘,我发现其他人也有类似的问题。这是他的答案的链接
原始问题:
原始答复:
谢谢@Unyxos
我修改了我的守护进程,使其在完成时发送一个“ENDRESPONSE”行,即使它没有断开连接。我修改了客户端以查找该“ENDRESPONSE”行。当客户端获得该行时,它使用@Unyxos在下面的回答中使用的逻辑断开连接
以下是他简单而优雅的回答:
终于找到了一种工作方式(也许不是最好的,但至少它完美地完成了我想要的:D)
在所有函数完成后,我发送一条“ENDRESPONSE”消息,并在我的客户端上测试是否有此消息:
function sendMessage {
while read line; do
if [[ $line == "ENDRESPONSE" ]]; then
break
else
echo $line
fi
done < <(netcat "$ipAddress" "$port" <<< "$*")
}
函数发送消息{
边读边做
如果[[$line==“ENDRESPONSE”];则
打破
其他的
回音$线
fi
完成netcat
有此选项:“-N关闭(2)输入端EOF后的网络套接字。某些服务器需要此选项来完成其工作。”我不知道ncat
有任何等效选项。BSDnetcat
有此选项:“-N关闭(2)输入上的EOF之后的网络套接字。某些服务器需要此套接字来完成其工作。“我不知道ncat
有任何等效项。