NetworkStream.DataAvailable == false նշանակում է, որ անմիջապես կարդալու համար բայթեր պատրաստ չեն։ Սա չի նշանակում, որ HTTP պատասխանն ավարտված է։ Այնտեղ կանգնող ցիկլը կարող է կտրել լրիվ նորմալ SOCKS ներբեռնումը փաթեթների միջև դադարի ընթացքում։

Այն բանից հետո, երբ SOCKS-ը հաստատում է TCP կապը, ավարտի կանոնը դեռ տալիս է HTTP շրջանակավորումը՝

  • Content-Length-ով մարմինն ավարտվում է հայտարարված բովանդակության բայթերից հետո։
  • Chunked պատասխանին անհրաժեշտ են ավարտող chunk-ը և համապատասխան trailer-ները։
  • Կապով սահմանափակված պատասխանն ավարտվում է կապի հետ միասին։
  • Որոշ կարգավիճակներ և HEAD-ի պատասխաններ մարմին չունեն։

Կարդացեք կարգավիճակը և վերնագրերը՝ կիրառելի կանոնը որոշելու համար։ Միայն փակմանը սպասելը ընդհանուր լուծում չէ, որովհետև ամբողջական HTTP պատասխանը կարող է կապը բաց թողնել։ Մեկ բուֆերի տարողությունը նույնպես կապված չէ պատասխանի երկարության հետ։

Օգտագործեք HTTP հաճախորդի շրջանակավորման իրականացումը, երբ այն աջակցում է ընտրված պրոքսի փոխադրմանը։ Համատեղելի ժամանակակից .NET գործարկման միջավայրում դիտարկեք HttpClient-ի ներկառուցված SOCKS աջակցությունը։ Հում իրականացումը պետք է պահպանի վերլուծության վիճակը մասնակի վերնագրերի և մարմնի ընթերցումների ընթացքում և տարբերի հաջող ավարտը չեղարկումից, ժամկետի լրանալուց և անսպասելի EOF-ից։ Ոչ դատարկ ընթերցման հարցումում զրո կարդացված բայթը նշանակում է, որ հոսքն ավարտվել է. սա տարբերվում է նրանից, որ հենց հիմա հերթում բայթեր չկան։

Պրոքսին կարող է ժամանակային ընդմիջումները տեսանելի դարձնել, բայց այն դատարկ ընդունման հերթը չի վերածում հաղորդագրության ավարտի նշանի։

Առնչվող հոդվածներ