2016-12-26 9 views
0

私は単純なクライアントサーバーアプリケーションを作成しようとしています。クライアントからのデータをサーバー側で受信する&を送信しています。そのデータを共通バッファに格納し、後で各クライアント用のファイルを作成して印刷する必要があります。共通のバッファデータをファイルに格納します。while(true)を使用せずにrecv関数を使用する方法?

do 
    { 
     int numByte=recv(server,buffer,bufsize,0); 
     if (numByte == -1) 
     { 
      printf("ERROR : could not receive bytes \n"); 
     } 
     //buffer[numByte]='\0'; 
     //bzero(buffer,10000); 

    for(int i=0;i<10;i++) 
    { 
    strcpy(globalBuffer[i],buffer); 
     //cout<<"Global_buffer:"<<globalBuffer[i];   
    } 


    for(int j =0;j<10;j++){ 
    fprintf(fp, "%s",globalBuffer[j]); 

    } 
    //strcpy(buffer,globalBuffer[fileNum]); 
    fflush(fp); 
}while(!isExit); 

上記の一つは、私は、ファイルにglobalBufferに、後に印刷そのglobalBufferデータにバッファデータをコピーしようとしているコードスニペットです。私は各ファイルに対して10文字の文字列メッセージを出力することになっていますが、do-whileループを持っているので、ループは決して終了しません。fprintf(fp, "%s",globalBuffer[j]) do-whileループのために終了しません。 do-whileループはdo-whileループが終了しないので不可能です。

do-whileループを回避する方法はありますか?do-whileループとして機能するrecv()関数にフラグがありますか?

答えて

0

recv()がゼロを返すと、ピアが切断されたことを意味し、ほとんどの場合-1を返してエラーを示すループを終了するはずです。確かにこれを見たことがありますか?

+0

ありがとう、私は最終結果を得た.. !! – Shivakumar

+1

@ Shivakumarそれは何を意味するのか分かりにくいですが、ここで役に立つと思われる回答をアップアップしたり受け入れたりすることを検討する必要があります。 – EJP

関連する問題