2013-05-10 111 views
0

我编写了两个程序,一个是服务器,另一个是客户端。使用Linux Shell运行客户端服务器的时间数

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

我想运行测试以查看多少文件大小的传输时间。每个文件大小我会做大约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。)

+0

它是不是这是一个问题的脚本,这是你如何写服务器/客户端代码。将服务器程序更改为同时接受多个客户端(假设您不只是复制/粘贴代码),或者确保每个服务器都可以独立运行。 – 2013-05-10 07:20:22

+0

谢谢,但在我的测试中,一次服务器与一个客户端进行通信。如果一台服务器接受多个客户端,则结果不正确。 – leokaka 2013-05-10 07:25:53

回答

0

只是做一个全球for循环,而不是为每个客户端和服务器的循环,如果你需要的是每次迭代一个客户端 - 服务器。喜欢的东西 -

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

要找到你的脚本的执行时间,你可以使用time ./x.sh这将给你的整个脚本的执行时间......如果你想执行时间每次迭代,那么你有找到每个循环的startend次,并从前者中减去后者。

0

当然,它是那样简单

#!/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不要等待服务器进程结束。

(感谢弗洛里斯)

+1

我怀疑在服务器启动后需要'&',或者在启动客户端之前等待服务器完成? – Floris 2013-05-10 10:36:30

+0

@弗洛伊斯我认为服务器是分叉的,但如果不是,那么你是对的。 – JeremyP 2013-05-10 10:37:52

相关问题