シンプルな C++ Web サーバー

Shinpuruna C Web Saba



この記事では、C++ の Web サーバーについて学びます。 Web サーバーの主な目的は、受信した HTTP リクエストを処理し、すべての受信リクエストを処理し、Web HTML コンテンツで応答することです。ネットワーク通信や問題を処理するために、「ソケット」などのネットワーク ライブラリを C++ 環境に追加するだけで、Web サーバーを C++ で維持する必要があります。 Web サーバーはインターネットのバックボーンであり、ユーザーとメイン サーバー間の通信手段です。適切な実装例を通じて、単純な Web サーバーを作成するプロセスを評価してみましょう。

環境のセットアップ

まず、環境内で必要なオプションをすべてセットアップする必要があります。受信 HTTP リクエストをリッスンするにはソケットを利用する必要があります。その後、システムとしてホスト マシン上の特定のポートにソケットをバインドします。その後、クライアントがリクエストを呼び出すと、サーバーはこれらの受信接続リクエストをリッスンします。サーバーは、HTTP リクエストを通じてユーザーのリクエストに応答し、ユーザーのリクエストをサーバーにフェッチします。その後、サーバーはリクエストを処理し、適切に作成して HTTP レスポンスをユーザーに返します。







Webサーバーのソケット処理

このセッションでは、ソケットがシステム内で実行されるさまざまなプロセス間の通信を作成することを学びます。ソケットは基本的に、クライアントのブラウザとサーバー間の通信または接続を作成するために使用されます。ソケットの接続は、次に説明する方法で C++ で構築されます。



ここではソケット用のライブラリを「#include 」として定義します。 main関数では、「server_fd」を初期化してソケットを作成します。その後、ストック接続の検証が含まれる「server_fd」の値を確認します。サーバーがダウンしていて正常に動作していない場合は、「ソケットの作成に失敗しました」というメッセージが返されるか、表示されます。それ以外の場合、Web サーバーの IP アドレスを含むメッセージには、Web サーバー上の HTML のデータが表示されます。



#include
#include
#include
整数メイン ( {
intserver_fd = ソケット ( AF_INET、SOCK_STREAM、 0 ;
もし ( サーバー_fd == - 1 {
std::cerr << 「ソケットの作成に失敗しました」 ;
戻る -1 ;
}
// それ以外
// {
// std::cout << '出口' ;
// }
// 練る
std::cout << 「http//:127.0.0.1:8080」 ;
// さらなるコードはここにあります
戻る 0 ;
}


このコードの出力を以下に添付します。






これは、Web サーバーに接続するためのソケットが C++ で正常に作成されたことを示しています。

C++ での Web サーバーの処理

システムの Web サーバーは、マージ ソート、線形ソートなどのさまざまな C++ 概念を処理するように設定されています。重要なネットワーク ライブラリを初期化することを忘れないでください。 Web サーバーはローカル マシン (127.0.0.1) 上で実行され、ポート 8080 でリッスンします。



次のように、必要なライブラリを C++ プログラミング言語に含めます。

# 含む < ブースト / asio.hpp >


C++ で Web サーバーを作成するのは簡単ではなく、時間のかかるプロセスであることに注意してください。 「async_accept」を使用して受信接続を処理できます。

Web サーバー上の C++ コードのサーバー応答

サーバーの応答は、ブラウザ上で動作し、Web ページの HTML ビューに出力を表示する HTTP である必要があります。すべてのライブラリはサーバーを管理し、すべての有効なリクエストを処理します。

Webサーバーのバインドとリスニング

次に、Web ページ上のコードを簡単に実行するために、Web サーバーのバインドとリスニングについて知る必要があります。その後、ソケットをシステムの指定されたアドレス、基本的にはこれらのソケットがアクティブになっている IP アドレスとポートにバインドする必要があります。ポート上で、着信接続のリッスンを開始します。

バインドしてリンクするには、いくつかのライブラリを初期化する必要があります。

Sockaddr_in アドレス;


サーバーをバインドできます。サーバーがダウンしているか接続されていない場合、メッセージはブラウザの Web ページに表示されません。

Webサーバーへの接続を受け入れる

このセクションでは、クライアントのリクエストのフローを制御する方法を学びます。サーバーは、HTTP プロトコルを通じてすべてのクライアント要求を受け入れます。サーバー ソケットは、Web サーバーでクライアントから受信されるメッセージのサイズを示します。メッセージには、サーバーのソケット接続とアドレスがより明確かつ一意に含まれます。ユーザーソケットが見つかった場合にサーバーが応答する必要があるかどうかを確認します。ユーザーソケット接続が見つからない場合、Web サーバーへの接続を受け入れることができません。

ユーザーおよびサーバー側からのデータの送受信方法

ソケット リンクを作成して接続を受け入れたら、次はさまざまなキーワードを使用してサーバー側にデータを送信し、サーバーからデータを受信し、データの送受信に関連する関数を C++ で構築します。ここでは、データの応答を確認します。このリクエストはデータを取得するためのものですか、それとも Web サーバーからデータを POST するためのものですか?クライアントのリクエストに対する応答状況を確認します。すべてのクライアント要求を一時的にバッファーに保存して、Web サーバーにメッセージまたは出力を表示します。

C++ での線形ソート

ここで線形ソートを実行し、線形ソートの結果をWebサーバー上で簡単に表示してみましょう。線形ソートのコード スニペットを以下に添付します。

#include
名前空間 std を使用します。
ボイドリニアサーチ ( 整数配列 [ 、int len、int 項目 {
のために ( 整数 = 0 ;私 < レン;i++ {
もし ( 到着しました [ == アイテム {
コート << アイテム << 「インデックスで見つかりました:」 << 私;
戻る ;
}
}
コート << '見つかりません' ;
}
整数メイン ( {
整数配列 [ = { 10 5 15 21 、 - 3 7 } ;
int len = サイズ ( 到着しました / のサイズ ( 到着しました [ 0 ;
int 項目 = 21 ;
リニアサーチ ( arr、len、アイテム ;
戻る 0 ;
}


この例では、項目「21」をどのインデックスで検索します。そこで、このコードを実行します。このコードの出力を以下に添付します。


この出力は、Chrome、Edge などのブラウザと同様に、Web サーバー上で開かれるようになりました。

出力表示後にすべての接続を終了する

これは、Web サーバー上のデータを処理する最後のステップです。必要な出力を実行した後は、必ずソケット接続を閉じてください。ここでは「close(server_id)」や「close (clientソケット)」などの関数を使ってソケットを閉じます。

サーバーの実行の最後に、アドレス「http//localhost:8080」にアクセスすると、予想される出力が Web ページに表示されます。

結論

この記事の最後に、C++ での単純な Web サーバーの処理は非常に複雑であり、HTTP クライアントのリクエストを送受信するには完全な集中力が必要であると言えます。 Web サーバーの機能を拡張して、Web ページ上にコンテンツを動的に表示できます。この記事がお役に立てば幸いです。また、これらの例をご使用の環境で実行して、C++ で単純な Web サーバーを作成するために必要な手順を理解していただければ幸いです。