客户端在收到所有响应后不关闭与服务器的连接

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" <<< "$*")
}

无论如何感谢您的帮助,我稍后会尝试实施其他解决方案!