客户端在收到所有响应后不关闭与服务器的连接
Client doesn't close connection to server after receiving all responses
对于一个学校项目,我必须创建一个 bash 脚本,它与远程 netcat 服务器通信并向该服务器发送命令,然后返回响应。
在我的客户端脚本中,我有一个 sendMessage
函数,它向服务器发送消息,然后显示来自服务器的响应。我的问题是在收到响应后,netcat 仍在等待来自服务器的数据并且不会关闭连接。
我已经尝试了-q参数,但没有得到我的回应,-w参数几乎是我想要的,但最小值是1秒,这在我的中是不可能使用的案例.
这是我的函数:
function sendMessage {
netcat -w 1 "$ipAddress" "$port" <<< "$*"
}
我仍在搜索,但我不得不承认非常欢迎提供一点帮助。
你可以exec
nc
as coproc
, 将行发送到服务器,然后使用 read
超时读取响应,检查是否响应已完成,然后通过向 nc
.
发送信号来关闭连接
除了使用 nc
,您也许还可以使用 bash TCP 功能,例如
exec 5<>/dev/tcp/"$HOST"/"$PORT"
read -t "$TIMEOUT" -n "$MAXLEN" line
exec 5<&- 5>&-
终于找到了一种工作方式(也许不是最好的,但至少它完美地完成了我想要的 :D)
完成所有功能后,我发送一条 "ENDRESPONSE" 消息,并在我的客户端上测试我是否收到此消息:
function sendMessage {
while read line; do
if [[ $line == "ENDRESPONSE" ]]; then
break
else
echo $line
fi
done < <(netcat "$ipAddress" "$port" <<< "$*")
}
无论如何感谢您的帮助,我稍后会尝试实施其他解决方案!
对于一个学校项目,我必须创建一个 bash 脚本,它与远程 netcat 服务器通信并向该服务器发送命令,然后返回响应。
在我的客户端脚本中,我有一个 sendMessage
函数,它向服务器发送消息,然后显示来自服务器的响应。我的问题是在收到响应后,netcat 仍在等待来自服务器的数据并且不会关闭连接。
我已经尝试了-q参数,但没有得到我的回应,-w参数几乎是我想要的,但最小值是1秒,这在我的中是不可能使用的案例.
这是我的函数:
function sendMessage {
netcat -w 1 "$ipAddress" "$port" <<< "$*"
}
我仍在搜索,但我不得不承认非常欢迎提供一点帮助。
你可以exec
nc
as coproc
, 将行发送到服务器,然后使用 read
超时读取响应,检查是否响应已完成,然后通过向 nc
.
除了使用 nc
,您也许还可以使用 bash TCP 功能,例如
exec 5<>/dev/tcp/"$HOST"/"$PORT"
read -t "$TIMEOUT" -n "$MAXLEN" line
exec 5<&- 5>&-
终于找到了一种工作方式(也许不是最好的,但至少它完美地完成了我想要的 :D)
完成所有功能后,我发送一条 "ENDRESPONSE" 消息,并在我的客户端上测试我是否收到此消息:
function sendMessage {
while read line; do
if [[ $line == "ENDRESPONSE" ]]; then
break
else
echo $line
fi
done < <(netcat "$ipAddress" "$port" <<< "$*")
}
无论如何感谢您的帮助,我稍后会尝试实施其他解决方案!