You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过脚本向netcat服务器动态提交1000次求和结果?

问题与解决方案

需求说明

教授布置任务:编写脚本处理netcat服务器的提示,计算服务器给出的两个数的和,连续1000次实时提交求和结果给服务器,不能等连接关闭后再输出结果。已用awk编写提取数字并求和的函数,但无法实现实时传递结果给netcat,尝试直接输出结果和封装函数均未成功。

服务器交互示例

Welcome to the Ultimate Math Contest!!
Solve 1000 quick math problems to complete
You have 10 second for each problem.
What is the sum of 89187 + 26971:
You have 5 seconds to type in your stuff...
Exit...
116158

当前脚本

#!/bin/bash
extract_numbers(){
numbers=($(echo "$output" | awk 'NR==4 {gsub(/[^0-9]+/, " "); var1=$1; var2=$2; print var1, var2}'))
number1=${numbers[0]}
number2=${numbers[1]}
sum=$((number1 + number2))
echo $sum
}
output=$(echo "" | nc 65.2.97.115 8003)
echo "$output"
result=$(extract_numbers "$output")
echo $result

解决方案

当前脚本的核心问题是用$()捕获nc的全部输出,必须等连接关闭后才能处理,无法实现实时交互。要完成连续1000次实时提交,需要让脚本与nc保持持续的双向通信。

方法1:用awk直接处理并实时响应

将提取、计算逻辑整合到awk中,通过管道与nc直接交互,每拿到一个问题就立即计算并返回结果:

#!/bin/bash
nc 65.2.97.115 8003 | awk '
    /What is the sum of/ {
        # 从行中提取两个数字
        split($0, parts, /[^0-9]+/)
        num1 = parts[2]
        num2 = parts[3]
        sum = num1 + num2
        print sum
        fflush()  # 强制刷新输出缓冲区,避免延迟超时
    }
'

方法2:用bash循环实时处理

如果想保留bash函数逻辑,可通过进程替换实现双向通信,让nc的输出实时传给bash处理,同时将结果实时写回nc:

#!/bin/bash
process_problem() {
    while read -r line; do
        # 可选:打印服务器输出用于调试
        # echo "$line"
        if [[ "$line" == *"What is the sum of"* ]]; then
            # 提取行中的数字
            numbers=($(echo "$line" | grep -oE '[0-9]+'))
            num1=${numbers[0]}
            num2=${numbers[1]}
            sum=$((num1 + num2))
            echo "$sum"  # 将结果发送给服务器
        fi
    done
}

# 进程替换实现双向通信
nc 65.2.97.115 8003 < <(process_problem)

关键注意点

  • 禁止用$()捕获nc输出,这种方式会阻塞到连接关闭,无法实时响应。
  • 必须确保输出无缓冲(awk中用fflush(),bash中默认行缓冲足够),避免结果延迟发送导致超时。
  • 服务器每个问题有时间限制,两种方法都能保证处理速度满足要求。

内容的提问来源于stack exchange,提问作者NITHINN MANICKAM G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 17:43:16