2013-05-10 69 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

相關問題