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.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTk5ODU5MzcsIm5iZiI6MTcxOTk4NTYzNywicGF0aCI6Ii84NDI1OTQyMi8yOTQ3NTM3NDctMWYyMzdmOGUtM2RiMy00ZWVhLWFlZDktOWNjNjgxYjU3OWE0LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDMlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzAzVDA1NDcxN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWFkOWIyMTkzYzg0YzdiNmQ1NzM5OGEwMWE1NmQxMmFlMWRkZDYyNGE2ZjFjNjA1YTZmZjQ3M2Q0ODg3YThmZjcmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.glEW9tMvKpvwjTlFubFGoa8in3rTeCbDBsYdQ6ZCk_8)
符号化・復号化を組み込み、柔軟で保守性の高いファイル転送プログラム
-
サーバの機能 (share_server.c)
- ftプログラムを拡張し、クライアントからのリクエストに応じて、ファイルの送受信を決定する。
-
クライアントの機能 (ft_client.c)
- ターミナルからのコマンドを受け付け、ファイルの送受信を決定する。
![share](https://private-user-images.githubusercontent.com/84259422/294753776-fbf0c8b2-0829-4a5b-a732-635c37891077.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTk5ODU5MzcsIm5iZiI6MTcxOTk4NTYzNywicGF0aCI6Ii84NDI1OTQyMi8yOTQ3NTM3NzYtZmJmMGM4YjItMDgyOS00YTViLWE3MzItNjM1YzM3ODkxMDc3LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDMlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzAzVDA1NDcxN1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWFkOWQ4YjhkZWY1NmRhZDUwNzk5ZDY5N2E4NzI2YjVmMDE2YjdiYTVlYjdkMzljNDYzNzNhMTY0MmU3MDhjZmImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.GU3jEbmbLYECp3PqtldhWBi5lM1NOO0mbXRcmTox8n8)
- makeとgccをインストール
- Makefileがあるディレクトリでmakeコマンドを実行
- サーバプログラムを実行後、別のターミナルでクライアントプログラムを実行する。以下にUbuntuでの実行例を示す。
ターミナル1:./share_server
ターミナル2:./share_client
ターミナル3:./share_client