Skip to content

Satorien/Socket-Programming

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 

Repository files navigation

プロジェクト概要

  • 目的
    • 単純なHTTPサーバ・クライアントの実装を通して、ネットワークの基礎を理解する
  • 要件
    • 言語:C
      • システムコールを使用
    • プロトコル:HTTP/1.1
      • 機能
        • クライアント側
          • リクエストの送信
            • 加算演算をリクエストする機能を実装
              • 加算演算はint型で行うため32ビット符号付き整数の範囲内
                • 具体的には[-2147483648, 2147483647]の範囲
              • 負の数も括弧を使わずにクエリに含めることができる
                • 例:5 + -35+-3としてクエリに含める
            • リクエスト例:GET /calc?query=2+10 HTTP/1.1
        • サーバ側
          • GETリクエストの処理
            • 加算演算を実行するAPIエンドポイントを提供
            • レスポンス例:HTTP/1.1 200 OK\r\nContent-Length:2\r\n\r\n12

実装内容

  • ファイル構成

    • server.c:HTTPサーバのロジック 0. ソケットの作成とバインド

      • socket(): 通信エンドポイントを作成・ファイルディスクリプタを返す
        • domain: AF_INET(IPv4)
        • protocol: SOCK_STREAM (信頼性の高い通信)
      • bind(): ソケットにアドレスを割り当てる
        • socket address familyがAF_INETの場合、struct sockaddr_inを使用
      1. クライアントからの接続受付
      • listen(): accept()で接続を待機するための準備
      • accept(): クライアントからの接続を受け入れ、新しいソケットを作成
      1. リクエストの受信と解析
      2. 指定された処理の実行
      3. レスポンスの生成と送信
      4. ソケットのクローズ
    • client.c:HTTPクライアントのロジック 0. ソケットの作成

      1. サーバへの接続
      2. リクエストの生成と送信
      3. レスポンスの受信と表示
      4. ソケットのクローズ
    • Makefile:ビルド用Makefile

  • ビルド手順

    • このディレクトリ直下で以下を実行
      make
  • 実行手順

    • ビルド後、以下を実行してサーバを起動
      ./server
    • デフォルトでポート8080で待機
      • ブラウザまたはcurlでアクセス可能
        • 例:curl "http://localhost:8080/calc?query=5+3"
      • 終了するにはCtrl+Cを押す

補足

  • そもそもソケットとは?
    • 任意のプロセス間通信行うための抽象化されたインタフェース
    • プロセス間通信の一つとしてインターネット通信があるという構造
  • 全体の流れ
    1. 上位のサーバソケットの作成
    2. ポートをバインドする
    3. デーモンを初期化する
    4. デーモンプロセスで待機する
    5. 接続を許可してクライアント用のソケットを作成する
    6. リクエストの処理をする
    7. クライアント用のソケットを閉じる
    8. 4に戻る

参考資料

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published