【问题标题】:Using Linux Shell to run a Client - Server for numbers of time使用 Linux Shell 运行客户端 - 服务器的次数
【发布时间】:2013-05-10 07:15:36
【问题描述】:

我编写了两个程序,一个是服务器,另一个是客户端。

这两个程序的目的是文件传输。首先,将启动服务器程序,然后启动客户端程序。客户端程序将从服务器接收文件。

我想运行一个测试,看看对于多种文件大小的传输需要多长时间。每个文件大小我会做10次左右。

代码没问题。当我写两个这样的脚本时:

#!/bin/bash
time=$1
for((n=0;n<time;n++))
do
    ./server "3mb.MP3"
done

#!/bin/bash
time=$1
for((n=0;n<time;n++))
do
    ./client $n
done

并先运行服务器脚本,然后运行客户端脚本。我意识到由于for循环,创建了许多服务器实例,因此创建了客户端。我只希望一个客户端和一个服务器一次相互通信。当文件传输结束后,我们将创建一对新的客户端-服务器。

有什么解决办法吗?

谢谢!

(我使用的是 Ubuntu 12.04。)

【问题讨论】:

  • 问题不在于脚本,而在于您编写服务器/客户端代码的方式。将服务器程序更改为同时接受多个客户端(假设您不只是复制/粘贴代码),或者确保每个服务器能够独立于另一个运行。
  • 谢谢,但在我的测试中,一台服务器一次与一位客户通信。如果一台服务器接受多个客户端,则结果不正确。

标签: c linux shell


【解决方案1】:

只需为每个客户端和服务器执行一个全局 for 循环而不是循环,如果您需要每次迭代一个客户端-服务器。像--

time=$1
for((n=0;n<time;n++))
do
    ./server "3mb.MP3"
    ./client $n
done

要查找脚本的执行时间,您可以使用time ./x.sh,这将为您提供整个脚本的执行时间...如果您想要每次迭代的执行时间,那么您可以找到start 和@每个循环 987654325@ 次,并从前者中减去后者。

【讨论】:

    【解决方案2】:

    当然就这么简单

    #!/bin/bash
    time=$1
    for((n=0;n<time;n++))
    do
        ./server "3mb.MP3"
        ./client $n
    done
    

    如果您的服务器没有在内部分叉,您可能需要这个:

    #!/bin/bash
    time=$1
    for((n=0;n<time;n++))
    do
        ./server "3mb.MP3" &
        ./client $n
    done
    

    & 符号导致 shell 不等待服务器进程完成。

    (感谢弗洛里斯)

    【讨论】:

    • 我怀疑你在服务器启动后需要&amp;,否则你会等到服务器完成后再启动客户端?
    • @Floris 我假设服务器正在分叉,但如果不是,你是对的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多