C में एक सरल HTTP सर्वर बनाएँ [बंद]


105

मुझे सी। में एक सरल HTTP सर्वर बनाने की आवश्यकता है। कोई मार्गदर्शन? लिंक? नमूने?


1
ठीक यही मैंने सोचा था
Rik

1
मुझे भी अब वही समस्या थी। मैंने इस लिंक का इस्तेमाल किया । आशा है कि इससे आपको भी मदद मिलेगी।
उदारा एसएस लियाणगे

1
कैसे एक सवाल पूछने के बारे में पूछे जाने वाले प्रश्न के बारे में । आपको 3K के बाद पता होना चाहिए कि यह एक वास्तविक प्रश्न नहीं है, यह इतने सारे वोट कैसे प्राप्त कर सकता है?

इसके बारे में कैसे> github.com/Taymindis/fcgi-function/wiki/…
Oktaheta

1
यह स्पष्ट रूप से एक बहुत ही उपयोगी प्रश्न है। यह बंद क्यों है?
McBear होल्डन

जवाबों:


85

मेरा सुझाव है कि आप छोटे httpd पर एक नज़र डालें । यदि आप इसे खरोंच से लिखना चाहते हैं, तो आप RFC 2616 को अच्छी तरह से पढ़ना चाहेंगे । उपयोग बीएसडी कुर्सियां एक बहुत कम स्तर पर नेटवर्क पर पहुंचने के।


2
या inetd का उपयोग करें और नेटवर्किंग हिस्से को छोड़ें।
जिक्रवे डे

22
RFC 2616 को अभी न पढ़ें , यह इसके द्वारा
माना

2
tiny httpdयहाँ भी github पर है: github.com/larryhe/tinyhttpd
Purplejacket

119

मेरा सुझाव है कि आप इस पर एक नज़र डालें: लेखन और ग्राहकों के लिए एक व्यावहारिक गाइड

वृद्धिशील चरणों में आपको क्या लागू करना है:

  1. अपनी मूल टीसीपी सॉकेट लेयर को चलाएं (पोर्ट / पोर्ट्स पर सुनें, क्लाइंट कनेक्शन स्वीकार करें और डेटा भेजें / प्राप्त करें)।
  2. एक बफर रीडर लागू करें ताकि आप एक बार में एक लाइन (सीआरएलएफ द्वारा सीमांकित) पढ़ सकें।
  3. बहुत पहली पंक्ति पढ़ें। विधि, अनुरोध संस्करण और पथ को पार्स करें।
  4. "हेडर: मान" सिंटैक्स के लिए हेडर पार्सिंग को लागू करें। मुड़े हुए हेडर को अनफॉलो करना न भूलें।
  5. शरीर कैसे पढ़ा जाएगा / निर्धारित करने के लिए अनुरोध विधि, सामग्री प्रकार और सामग्री के आकार की जांच करें।
  6. सामग्री प्रकार के आधार पर सामग्री का डिकोडिंग लागू करें।
  7. यदि आप HTTP 1.1 का समर्थन करने जा रहे हैं, तो "100 जारी रखें", रख-रखाव, chunked स्थानांतरण जैसी चीजों को लागू करें।
  8. अधूरे अनुरोधों का पता लगाने, ग्राहकों की अधिकतम संख्या को सीमित करने जैसी मजबूती / सुरक्षा उपाय जोड़ें।
  9. अपने कोड को लपेटें और इसे ओपन-सोर्स करें :)

बिंदु # 9, विशेष रूप से यहां एक प्रश्न पोस्ट करने के बाद, +1 :)
Matthieu

26

एक HTTP सर्वर वैचारिक रूप से सरल है:

  • ओपन पोर्ट 80 सुनने के लिए
  • जब संपर्क किया जाता है, तो थोड़ी जानकारी इकट्ठा करें (मुख्य रूप से प्राप्त करें - आप अभी के लिए बाकी की उपेक्षा कर सकते हैं)
  • फ़ाइल अनुरोध में अनुवाद का अनुरोध करें
  • फ़ाइल खोलें और इसे क्लाइंट पर वापस थूक दें

यह इस बात पर निर्भर करता है कि आप कितना HTTP का समर्थन करना चाहते हैं - POST कुछ अधिक जटिल, स्क्रिप्ट, कई अनुरोधों को संभालने आदि के आधार पर अधिक कठिन हो जाता है।

लेकिन आधार बहुत सरल है।


25

Mongoose (पूर्व में सरल HTTP डेमॉन) बहुत अच्छा है। विशेष रूप से, यह विंडोज, विंडोज सीई और यूनिक्स के तहत एम्बेड करने योग्य और संकलन है।


12

पोर्ट 80 पर एक टीसीपी सॉकेट खोलें, नए कनेक्शन के लिए सुनना शुरू करें, इसे लागू करें । अपने उद्देश्यों के आधार पर, आप लगभग हर चीज को अनदेखा कर सकते हैं। सबसे आसान पर, आप प्रत्येक अनुरोध के लिए एक ही प्रतिक्रिया भेज सकते हैं, जिसमें सिर्फ सॉकेट पर पाठ लिखना शामिल है।


11

Nweb (निगेल के वेब सर्वर) को देखें, "सी कोड कोड की केवल 200 लाइनों के साथ एक छोटा, सुरक्षित वेब सर्वर [...]:

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

लेख में स्यूडोकोड, स्पष्टीकरण और टिप्पणियां शामिल हैं।

EDIT: IBM का लिंक मर गया। मैंने वेबपेज के एक पीडीएफ को गूगल ड्राइव में सहेजा है। यहाँ कोड डाउनलोड है:

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

@ akushagarwal ने कुछ बदलाव किए हैं और GitHub पर अपना संस्करण अपलोड किया है: https://github.com/ankushagarwal/nweb


एह लिंक की जाँच के बिना मतदान किया गया: / मैं आपके द्वारा बताई गई सटीक चीज़ की तलाश कर रहा हूँ, अगर आपको लगता है कि आप मुझे पिंग कर सकते हैं? Txt
samayo

1
@samayo IBM का लिंक मर गया है। मैंने कुछ दर्पण प्रदान किए हैं।
XP1

: - यहाँ archive.org द्वारा एक दर्पण है जो उम्मीद है कि साल के लिए चारों ओर हो जाएगा आने के लिए web.archive.org/web/20140905115151/http://www.ibm.com/...
james246

5

मैंने अपना स्वयं का लिखा है जो आप उपयोग कर सकते हैं। यह एक काम करता है sqlite, धागा सुरक्षित है और UNIX के लिए C ++ में है।

आपको इसे अलग से लेने और सी संगत कोड का उपयोग करने में सक्षम होना चाहिए।

http://code.google.com/p/mountain-cms/




2

मैनिंग से http://www.manning.com/hethmon/ - "इलस्ट्रेटेड गाइड टू HTTP बाय पॉल एस हेथमन" एचटीटीपी प्रोटोकॉल सीखने के लिए एक बहुत ही अच्छी किताब है और इसे लागू करने वाले / इसे विस्तार देने वाले किसी व्यक्ति के लिए बहुत उपयोगी होगी।


1

HTTP प्रोटोकॉल को एनकैप्सुलेट करने के लिए प्लेटफ़ॉर्म विशिष्ट सॉकेट फ़ंक्शंस का उपयोग करें, जैसे अपाचे के पीछे के लोगों ने किया।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.