情報工学科 3年生対象 専門科目 システムプログラミング 第11回 プロセス間通信4 仮想FTPの実現 担当:青木義満 [email protected] 1 FTP(File Transfer Protocol)とは? • インターネット初期の頃から存在するプロトコルで、今 でもインターネットでよく使用されるプロトコルの1つで ある。プロトコル上は任意のホスト間のファイル転送を 行うことが可能であるが、通常は接続したクライアントと サーバ間の転送に利用される。 • 詳細は下記を参照 – http://ja.wikipedia.org/wiki/File_Transfer_Protocol 2 ストリームソケットを使った仮想FTPの実現1 異なるホスト間で、テキスト(ASCII)ファイルを送信・受信してみよう。 処理の手順 • サーバーを受信側(inet_server_ftp.c)、クライアントを送信側 (inet_client_ftp.c) とする。 • 従来の方法で、サーバー、クライアント間でストリームソケットを使い、コ ネクションを確立 • クライアントから、サーバー側へ送信するファイル名を送る(コマンドライ ン引数で与えている) • サーバー側はこれを受信し、新規ファイルとしてfopen • クライアントでファイルの中身をファイルの終端まで読み込み、ソケットを 通して送信 • サーバー側はこれを受信し、ファイルに書き込む まずは自分でやってみる。その後、友達とホスト名、ポート番号を共有し、 ファイルの送信テストを行ってみる。 3 ストリームソケットを使った仮想FTPの実現2 • 異なるホスト間で、バイナリファイルを送信・受信してみよう。 • 基本はテキスト版と同様。 • ファイルからのデータの読み書きに、fread(), fwrite()を使用。 – fopenの引数を”r”, ”w” から ”rb”, “wb”に変更(バイナリモード)。 – 送信側(inet_client_ftp_bin.c): • char型のバッファー1つを用意し、sizeof(char)単位(1byte)で1つずつfread()で ファイルからデータを読み出して、ソケットにwrite() – 受信側(inet_server_ftp_bin.c) • char型のバッファー1つを用意し、sizeof(char)単位(1byte)ずつread()でソケット からデータを読み出して、ファイルにfwrite()でsizeof(char)単位(1byte)で1つず つ書き出し • 注意!: テキスト版のプログラムのwhileループ内のprintfはテキスト データ表示用なので削除すること! • 実行: 適当なバイナリファイル(*.pdf や画像ファイルなど)を送受信。 4 ファイル操作関連関数 • • • • • fgets ファイルからの一行単位での文字列読込 fputs ファイルへの一行単位での文字列書込 fread ファイルからのバイナリデータの読込 fwrite ファイルへのバイナリデータの書込 関数の仕様は以下のページ参照 – http://www.bohyoh.com/CandCPP/C/Library/in dex.html • バイナリデータの入出力 – http://wisdom.sakura.ne.jp/programming/c/c48 5 .html バイナリ版FTPプログラム課題の提出 • 期限:12/18 10:40まで • 送信ファイル: – inet_server_ftp_bin.c 及び inet_client_ftp_bin.c • メール宛先:[email protected] • メール題目:system11 学籍番号 苗字(す べて半角英数) 6
© Copyright 2024 ExpyDoc