मेरे पास एक छोटा सा प्रोग्राम http अनुरोध भेजता है और टीसीपी प्रोटोकॉल के साथ प्रतिक्रिया प्राप्त करता है।सामग्री-लंबाई के बिना http अनुरोध की प्रतिक्रिया प्राप्त करना?
मेरा अनुरोध प्रारूप;
GET/HTTP/1.0
Host: somewebsite.com
{two new line}
मैं सॉकेट (ग # में NetworkStream और StreamReader उपयोग करते हुए) जब तक मैं सामग्री-लंबाई हेडर को खोजने से लाइन द्वारा प्रतिक्रिया लाइन पढ़ें। मैं लंबाई को स्टोर करता हूं, फिर खाली रेखा ढूंढने तक पढ़ना जारी रखता हूं। फिर लंबाई के साथ एक बफर बनाएँ और बाकी प्रतिक्रिया प्राप्त करें।
लेकिन कुछ reponses में सामग्री-लंबाई शीर्षलेख नहीं है। तो मेरा दृष्टिकोण विफल रहता है। अगर मुझे नहीं पता कि मुझे कितना बाइट प्राप्त करना चाहिए, जब मुझे रोकना चाहिए?
यह बहुत भ्रामक है। यदि प्रतिक्रिया में सामग्री-लंबाई वाला हेडर फ़ील्ड है और यह खंडित एन्कोडिंग का उपयोग नहीं करता है, तो यह आपके पास * केवल * जानकारी है। यदि आपको कम सामग्री मिलती है, तो सामग्री को छोटा कर दिया जाना चाहिए। यदि आपको अधिक सामग्री मिलती है, तो सीरर टूटा हुआ है, या आप पहले ही अगली प्रतिक्रिया देख रहे हैं। –
मैं नम्रतापूर्वक स्पष्टीकरण के लिए पूछ रहा हूं कि अगली प्रतिक्रिया को एक अद्वितीय सॉकेट पर कैसे पढ़ा जा सकता है, जब क्लाइंट ने अभी तक मौजूदा पार्सिंग को समाप्त नहीं किया है, इसलिए इसे पहले से ही अगले अनुरोध को बहुत ही असंभव रूप से भेजा गया है। मैं डाउनवोट बेहतर समझ सकता हूं। अन्यथा मुझे इस मामले पर कोई महत्वपूर्ण असहमति नहीं दिखाई दे रही है। जब आप घोषित सामग्री की लंबाई तक पढ़ते हैं तो आपको क्या करना होगा और सॉकेट पढ़ने से आपको पता चलता है कि 2 और बाइट शेष हैं? हकीकत में, "बेवकूफ टूटा हुआ सर्वर, मैं अब आपसे बात नहीं करूंगा" उतना ही लागू नहीं होता जितना अच्छा प्रोग्रामर चाहेंगे। –
vtmarvin: ग्राहक पाइपलाइनिंग का उपयोग कर सकता है। –