TCPを利用したファイル転送プログラム(ftプログラムとshareプログラム)を実装した。
クライアントが任意のファイルをサーバへ送信するファイル転送プログラム
-
サーバの機能 (ft_server.c)
- クライアントを待ち受け、接続があれば、子プロセスを作成する。
- ファイル名、ファイルサイズ、ファイルデータを順に受信し、それぞれACKを返す。
- クライアントから終了コマンドを受信すると、子プロセスを終了する。
-
クライアントの機能 (ft_client.c)
- scanf()でファイル名を受け取り、ファイル名、ファイルサイズ、ファイルデータを順にサーバへアップロードする。この時、サーバからそれぞれのACKを受信する。
- 複数のファイルをアップロードできるように、ループ文でユーザからのコマンドを受け付ける。この時、TCPコネクションは切断しない。
- 終了コマンドが入力されると、サーバに終了コマンドを送信し、クライアントプログラムを終了する。
- バッファサイズの上限は64バイトであり、一度にファイル全体を読み込んでデータを送信できない。そのため、ファイルデータを64バイトずつ読み込み、送信する。
![ft](https://private-user-images.githubusercontent.com/84259422/294753747-1f237f8e-3db3-4eea-aed9-9cc681b579a4.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjA3ODkwMzcsIm5iZiI6MTcyMDc4ODczNywicGF0aCI6Ii84NDI1OTQyMi8yOTQ3NTM3NDctMWYyMzdmOGUtM2RiMy00ZWVhLWFlZDktOWNjNjgxYjU3OWE0LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MTIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzEyVDEyNTIxN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTYwM2IxYjllYWZiOTA1NjAzZDM5YjdmY2VjZjRlYzAyNTA1NzZkZGQ0MWM5ZjVlOTIyMjQ0Zjk2MTQ0OWRlZjMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.bBD8pwXj-zrJmh43ThIxArK4_DWQyG0Xem-GNQvzIwI)
符号化・復号化を組み込み、柔軟で保守性の高いファイル転送プログラム
-
サーバの機能 (share_server.c)
- ftプログラムを拡張し、クライアントからのリクエストに応じて、ファイルの送受信を決定する。
-
クライアントの機能 (ft_client.c)
- ターミナルからのコマンドを受け付け、ファイルの送受信を決定する。
![share](https://private-user-images.githubusercontent.com/84259422/294753776-fbf0c8b2-0829-4a5b-a732-635c37891077.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjA3ODkwMzcsIm5iZiI6MTcyMDc4ODczNywicGF0aCI6Ii84NDI1OTQyMi8yOTQ3NTM3NzYtZmJmMGM4YjItMDgyOS00YTViLWE3MzItNjM1YzM3ODkxMDc3LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MTIlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzEyVDEyNTIxN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTZkODNjMzQ2N2NmMjM1NzkxYTliNGMxYTk1MDQ5YTYwZDJlY2U0M2NkZTRmM2FlNDgwMTIwNjY3N2UwNjY3NjcmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.0358Tv4CrNIaEPuUxYGi1t855_UP00ABOnHbcO5x8DA)
- makeとgccをインストール
- Makefileがあるディレクトリでmakeコマンドを実行
- サーバプログラムを実行後、別のターミナルでクライアントプログラムを実行する。以下にUbuntuでの実行例を示す。
ターミナル1:./share_server
ターミナル2:./share_client
ターミナル3:./share_client