新しい接続が到着したサーバーがこの接続を受け入れ、最近サーバーに接続したクライアントにサービスするための新しいプロセスを作成すると、サーバーはクライアントからの新しい接続要求を頻繁に待つファイルダウンロードアプリケーションに取り組んできました。クライアントはサーバーから複数のファイルをダウンロードするよう要求できます。各ファイルについて、クライアント側とサーバー側は新しいスレッドを作成し、各ファイルのデータ転送は、サーバーとクライアントの適切なスレッド結合の間で実行する必要があります。私はスレッドのためにCとpthreadを使用しています。私は安定したソケット接続と各クライアントのための成功したプロセス作成が今のところあります。次のようにアプリケーションのようなクライアント/サーバーのスレッド同期?
は、ねじファイルランサーのために、私は試みを持っていた:私は同じ作成、サーバ側で同様
int k;
for (k = 0; k < fNameCounter; k++)
{
pthread_t thread_id;
int status = pthread_create(&thread_id, NULL, &receiveFile, fName);
if (status != 0)
{
printf("Thread Creation Failed \n");
exit(0);
}
}
:
をクライアントでは、私は、ファイルを受信するための方法を実行しているスレッドを作成していますスレッドの数は、次のように:あなたがpthread_createの中で見ることができるよう
int k;
for (k = 0; k < fnameCounter; k++)
{
pthread_t thread_id;
int status = pthread_create(&thread_id, NULL, &sendFile, fName);
if (status != 0)
{
printf("Thread Creation Failed \n");
exit(0);
}
}
SENDFILEとreceiveFile機能を単にfNameを(で指定されたファイルのバイトを書き込み、読み込み、 )ソケットによって、その時点で私は大きな問題があります:
これまでのプログラムでは、すべてのスレッドがサーバーからのデータの受信を完了した後にファイルの内容が異なる可能性があります。sendFile readFile関数はソケットから読み込んでソケットに書き込みます。
は、どのように私は、以下に説明するように、クライアントの各スレッドは、サーバの適切なスレッドから適切なデータを取得することを保証することができます
receive send
cthread1 ----> a.txt <----- sthread1
cthread1 ----> a.txt <----- sthread1
cthread1 ----> a.txt <----- sthread1
P.S.を私は、1つのソケットに多くのスレッドを作成することは意味がありませんが、それは私のhwだと私はそうする必要があることを知っている:/。
よろしくお願いいたします。
実際には、コースプロジェクトですので、そのようにする必要があります。また、私はそれは各クライアントのために1つのソケットから提供されますが、私は選択肢がないのでスレッドを使用する無意味であることを知っている:)と本当にその同期の問題に立ち往生。 – StM
質問を編集して制約を明確にしてください:単一のソケットと両側に多数のスレッドを使用して多数のファイルを並列に送信してください。これは譲渡であり、効率的な条件は交渉可能ではないことに言及する。 –