NetworkStream.DataAvailable HTTP પ્રતિસાદનો અંત દર્શાવતું નથી
અંતની શરત તરીકે NetworkStream.DataAvailable વાપરવાને બદલે સંદેશ ફ્રેમિંગ વાપરીને કપાયેલા HTTP ડાઉનલોડ અટકાવો.
NetworkStream.DataAvailable == false નો અર્થ છે કે તરત જ વાંચવા માટે કોઈ બાઇટ તૈયાર નથી. તેનો અર્થ એ નથી કે HTTP પ્રતિસાદ પૂર્ણ થયો છે. ત્યાં અટકતું લૂપ પેકેટો વચ્ચેના અંતરાલ દરમિયાન સંપૂર્ણ સામાન્ય SOCKS ડાઉનલોડ કાપી શકે છે.
SOCKS દ્વારા TCP જોડાણ સ્થાપિત થયા પછી પણ પૂર્ણતાનો નિયમ HTTP ફ્રેમિંગ જ આપે છે:
- Content-Length વાળું બોડી તેના જાહેર કરેલા સામગ્રી બાઇટ પછી પૂર્ણ થાય છે.
- Chunked પ્રતિસાદને તેના અંતિમ chunk અને લાગુ પડતા trailerની જરૂર હોય છે.
- જોડાણ-નિર્ધારિત પ્રતિસાદ જોડાણ સાથે પૂર્ણ થાય છે.
- કેટલાક સ્ટેટસ અને HEAD ના પ્રતિસાદમાં બોડી હોતી નથી.
લાગુ પડતો નિયમ નક્કી કરવા સ્ટેટસ અને હેડર વાંચો. ફક્ત બંધ થવાની રાહ જોવી સામાન્ય ઉકેલ નથી, કારણ કે પૂર્ણ HTTP પ્રતિસાદ જોડાણ ખુલ્લું છોડી શકે છે. એક બફરની ક્ષમતા પણ પ્રતિસાદની લંબાઈ સાથે સંબંધિત નથી.
HTTP ક્લાયન્ટનું ફ્રેમિંગ અમલીકરણ વાપરો જ્યારે તે પસંદ કરેલા પ્રોક્સી પરિવહનને સમર્થન આપે. અનુકૂળ આધુનિક .NET રનટાઇમ પર HttpClient ના સ્વદેશી SOCKS સમર્થન ધ્યાનમાં લો. કાચા અમલીકરણે આંશિક હેડર અને બોડી વાંચન દરમિયાન પાર્સિંગ સ્થિતિ જાળવવી પડે અને સફળ પૂર્ણતાને રદ, ટાઇમઆઉટ અને અણધારી EOF થી અલગ પાડવી પડે. ખાલી ન હોય તેવી વાંચન વિનંતીમાં, શૂન્ય બાઇટ વંચાવાનો અર્થ છે કે સ્ટ્રીમ પૂર્ણ થઈ ગઈ; આ અત્યારે કોઈ બાઇટ કતારમાં ન હોવાથી અલગ છે.
પ્રોક્સી સમયના અંતરાલને નજરે પડે તેવા બનાવી શકે છે, પરંતુ તે ખાલી પ્રાપ્તિ કતારને સંદેશના અંતના ચિહ્નમાં ફેરવતું નથી.