cのクライアントからサーバーにファイルを1行ずつ送信するプログラムをcで作成しました。ファイルが完全に送信された後、ファイルが終了しendoffile
、次のファイルが次に送信されていることを識別するために、サーバーで文字列比較するための行をtxtファイルに指定しました。次のファイルは、サーバー内の別のファイルに書き込む必要があります。しかし、問題は、strcmpがendoffile
コード内でを検出せずendoffile
、クライアントのファイルから等しい文字列として受信されることです。amdは、クライアントからサーバーの同じファイルに次のファイルを書き込み続けます。
char enof[]="endoffile";
...
do
{
rewind(appcrt);
bytes_recieved = recv(pass_arg.connected, recv_data_c, strlen(recv_data_c), 0);
recv_data_c[bytes_recieved-1] = '\0';
fputs(recv_data_c, appcrt);
if(strcmp(enof,recv_data_c) == 0){break;}
}while(check<count);
テキストファイル:
Necessary data
that is
being transmitted
to be written to the file
endoffile
txtファイルからの読み取りとサーバーへの送信に使用されるコード:
while (fgets(line, sizeof(line), crt) != NULL)
{
send(sock, line, sizeof(line), 0);
}
do....while();
問題が解決され、コードがループから抜け出すために、条件にどのような変更を加える必要がありますか。前もって感謝します。オペレーティングプラットフォーム:Linux
編集1:do....while()
次のように編集しました:
do
{
rewind(appcrt);
bytes_recieved = recv(pass_arg.connected, recv_data_c, 100, 0);
recv_data_c[bytes_recieved] = '\0';
fputs(recv_data_c, appcrt);
printf("%s-%s",enof,recv_data_c);
//if(strcmp(enof,recv_data_c) == 0){break;}
}while(check<count);
ターミナルで次の出力を取得しました。
endoffile-file1line1
endoffile-file1line2
endoffile-file1line3
endoffile-file1line4
endoffile-file1line5
endoffile-file1line6
endoffile-endoffile
endoffile-file2line1
endoffile-file2line2
endoffile-file2line3
endoffile-file2line4
endoffile-file2line5
endoffile-file2line6
.
.
.
まだ希望はありません。