-
プロジェクトの目的
- C言語と標準ライブラリ(システムコール)のみを使用したHTTPサーバーの実装
- 動的メモリ管理とエラーハンドリングの学習
- クライアントからの四則演算リクエストの処理
-
動作環境
- OS: Linux または macOS(Unix系)
- コンパイラ: GCC
- 依存: 標準ライブラリのみ(外部ライブラリ不使用)
simple_server.c- ポート8080で待機
- HTTPリクエストの解析と計算処理
- 結果のレスポンス送信
simple_client.c- サーバーへの接続
- 計算クエリ(例:
100+50*2)の送信 - 結果の受信と表示
- エンドポイント
- メソッド:
GET - パス:
/calc - クエリパラメータ:
query=[数式] - 例:
GET /calc?query=10+20-5
- メソッド:
- 計算ロジック
- 対応演算子:
+,-,*,/ - 計算順序: 左結合(左から右へ順に計算)
- 注意: 数学的な優先順位(掛け算優先など)は適用されない
- 対応演算子:
- レスポンス
- 成功時: ステータス
200 OK、ボディに計算結果(数値) - 失敗時: ステータス
404 Not Found、ボディにエラーメッセージ
- 成功時: ステータス
- 通信フロー (Socket通信)
socket(): ソケット作成bind(): ポート8080への紐付けlisten(): 接続待ち受けaccept(): 接続確立recv()/send(): データ送受信
- メモリ管理
- 動的確保:
mallocを使用し、リクエストごとに必要なメモリをヒープ領域に確保 - 解放: 処理終了後、必ず
freeを呼び出してメモリリークを防止
- 動的確保:
- エラー処理
- 全てのシステムコールの戻り値をチェック
- 失敗時は
perrorで原因を表示し、安全に終了または切断
- コンパイル
gcc simple_server.c -o simple_server.outgcc simple_client.c -o simple_client.out
- サーバー起動 (ターミナル1)
./simple_server.out 8080
- クライアント実行 (ターミナル2)
./simple_client.out 127.0.0.1 8080 "10+20*3"# IPv4./simple_client.out ::1 8080 "10+20*3"# IPv6