私は、テキストファイルを取得して保存できる非常に単純なFTPサーバープログラムを実装しています。私の質問は、FTPクライアントの要求が次の "RETR test.txt"のファイルを言うと、サーバーはどのようにこのファイルを送信しますか?そのテキストファイルを開いて内容をバッファにコピーし、それを単に送信するか、それともそれ以上にあるのですか?私はこれを実装する方法がわからない、誰かが基本的なアイデアを明確にすることができますか?FTPでRETRコマンドを実行すると、サーバーはどのようにファイルをクライアントに送信しますか?
編集::
if (strncmp(receive_buffer,"RETR",4)==0) {
sprintf(send_buffer,"150 Opening ASCII mode data connection... \r\n");
printf("<< DEBUG INFO. >>: REPLY sent to CLIENT: %s\n", send_buffer);
bytes = send(ns, send_buffer, strlen(send_buffer), 0);
if (bytes < 0) break;
closesocket(ns);
char temp_buffer2[80];
FILE *fin=fopen("test.txt","r");//open test.txt
while (!feof(fin)){
fgets(temp_buffer2,78,fin);
sprintf(send_buffer,"%s",temp_buffer2);
printf("%s",send_buffer);
if (active==0) {
printf("***active is 0");
send(ns_data, send_buffer, strlen(send_buffer), 0);
}
else {
printf("***active is 1+");
send(s_data_act, send_buffer, strlen(send_buffer), 0);
}
}
fclose(fin);
sprintf(send_buffer,"226 File transfer complete. \r\n");
printf("<< DEBUG INFO. >>: REPLY sent to CLIENT: %s\n", send_buffer);
bytes = send(ns, send_buffer, strlen(send_buffer), 0);
if (active==0)closesocket(ns_data);
else closesocket(s_data_act);
}
は、これは私がやっていることで、RETRコマンドのためにそれを試してみて、送信するためにあるtest.txtを開きます。しかし、これによりサーバーが切断されます。
こんにちは、サーバーはアクティブモードですが、どうすればそのようなファイルを送信できますか? – silent
申し訳ありませんが、ファイルの1バイトを読む方法がわかりません。 – silent
代わりにオープンソースコンポーネントを購入または使用します。それは安く聞こえる。 – jgauffin