Cで単純なHTTPサーバーを構築する[終了]


105

Cで単純なHTTPサーバーを構築する必要があります。ガイダンスはありますか?リンク?サンプル?


1
それがまさに私が思ったことです
Rik

1
今も同じ問題がありました。このリンクを使用しました。これがあなたにも役立つことを願っています。
Udara SS Liyanage、2011

1
質問する方法についてのFAQはどうですか。3Kの後、これは本当の質問ではないことを知っておく必要があります。どうしてそんなに多くの賛成票を獲得できるのでしょうか。


1
これは明らかに非常に役立つ質問です。なぜ閉鎖されているのですか?
McBear Holden 2017

回答:


85

小さなhttpdをご覧になることをお勧めします。最初から作成する場合は、RFC 2616完全に読みたいと思います。BSDソケットを使用して、非常に低いレベルでネットワークにアクセスします。


2
または、inetdを使用して、ネットワーク部分をスキップします。
jrockway 2009

22
RFC 2616を今は読まないでください:RFC 7230RFC 7231RFC 7232RFC 7233RFC 7234RFC 7235
songhir

2
tiny httpdこちらもgithubにあります: github.com/larryhe/tinyhttpd
Purplejacket

119

以下をご覧になることをお勧めします:クライアントとサーバーを作成するための実践ガイド

段階的に実装する必要があるのは、次のとおりです。

  1. 基本的なTCPソケットレイヤーを実行します(ポート/ポートをリッスンし、クライアント接続を受け入れ、データを送受信します)。
  2. バッファリーダーを実装して、一度に1行(CRLFで区切られる)で要求を読み取ることができるようにします。
  3. 最初の行を読んでください。メソッド、リクエストのバージョン、パスを解析します。
  4. 「Header:value」構文のヘッダー解析を実装します。折りたたまれたヘッダーを展開することを忘れないでください。
  5. リクエストメソッド、コンテンツタイプ、コンテンツサイズを確認して、本文の読み取り方法/方法を決定します。
  6. コンテンツタイプに基づいてコンテンツのデコードを実装します。
  7. HTTP 1.1をサポートする場合は、「100続行」、キープアライブ、チャンク転送などを実装します。
  8. 不完全なリクエストの検出、クライアントの最大数の制限など、堅牢性/セキュリティ対策を追加します。
  9. コードをシュリンクラップしてオープンソース化します:)

ポイント#9、特にここに質問を投稿した後、+ 1 :)
Matthieu

26

HTTPサーバーは概念的には単純です。

  • リスニング用にポート80を開く
  • 連絡が取れたら、少し情報を収集します(主に取得します-残りは今のところ無視できます)
  • リクエストをファイルリクエストに変換する
  • ファイルを開いてクライアントに吐き出す

サポートするHTTPの量によってはさらに難しくなります-POSTはもう少し複雑で、スクリプトや複数のリクエストの処理などです。

しかし、ベースは非常にシンプルです。


25

Mongoose(以前のSimple HTTP Daemon)はかなり良いです。特に、組み込み可能で、Windows、Windows CE、UNIXでコンパイルできます。


12

ポート80でTCPソケットを開き、新しい接続の待機を開始し、これを実装ます。目的によっては、ほとんどすべてを無視できます。最も簡単な方法では、すべての要求に対して同じ応答を送信できます。これには、ソケットにテキストを書き込むだけです。


11

nweb(NigelのWebサーバー)を見てください。「Cソースコードが200行しかない、小さく安全なWebサーバー[...]」

https://drive.google.com/file/d/0B3msld7qnNOhN1NXaFIwSFU2Mjg/view?usp=sharing http://www.ibm.com/developerworks/systems/library/es-nweb/

記事には、疑似コード、説明、コメントが含まれています。

編集:IBMのリンクが停止しました。ウェブページのPDFをGoogleドライブに保存しました。ここにコードのダウンロードがあります:

https://drive.google.com/file/d/0B3msld7qnNOhSGZGdDJJMmY0VHM/view?usp=sharing

@ ankushagarwalはいくつかの変更を加え、彼のバージョンをGitHubにアップロードしました:https : //github.com/ankushagarwal/nweb


リンクをチェックせずに投票しました:/何かを見つけたら、私にpingを送信できますか?TXT
samayo

1
@samayo IBMのリンクが停止しました。ミラーをいくつか用意しました。
XP1 2016

ここではarchive.orgによって鏡だ-うまくいけば、今後数年間のために周りになります。web.archive.org/web/20140905115151/http://www.ibm.com/...
james246





1

Apacheの背後にいる人たちと同じように、プラットフォーム固有のソケット関数を使用してHTTPプロトコルをカプセル化します。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.