0

私は 2 つのプログラムをコーディングしています。1 つはサーバー、もう 1 つはクライアントです。

これら 2 つのプログラムの目的はファイル転送です。最初にサーバー プログラムが起動し、次にクライアント プログラムが起動します。クライアント プログラムはサーバーからファイルを受け取ります。

テストを実行して、多くのファイル サイズで転送にかかる時間を確認したいと考えています。各ファイルサイズは約10回行います。

コードは大丈夫です。次のような 2 つのスクリプトを作成すると、次のようになります。

#!/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ループのために、サーバーの多くのインスタンスが作成され、クライアントが作成されることに気付きました。一度に 1 つのクライアントと 1 つのサーバーが相互に通信したいだけです。ファイル転送が終わったら、クライアントとサーバーの新しいペアを作成します。

解決策はありますか?

ありがとうございました!

(Ubuntu 12.04 を使用しています。)

4

2 に答える 2

0

for反復ごとに 1 つのクライアント サーバーが必要な場合は、クライアントとサーバーごとにループするのではなく、グローバル ループを実行するだけです。何かのようなもの -

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

スクリプトの実行時間を見つけるには、 time ./x.shwhich を使用してスクリプト全体の実行時間を得ることができます...各反復の実行時間が必要な場合は、各ループの時間を見つけてstartend後者から減算します前の。

于 2013-05-10T10:31:31.537 に答える
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

アンパサンドを使用すると、シェルはサーバー プロセスの終了を待機しなくなります。

(フローリスのおかげで)

于 2013-05-10T10:33:06.490 に答える