به نام خدا سلام بر برنامه نویسان عزیز 😉 در این مطلب سورس پروژه ی HTTP Server و پاسخ دادن به HTTP requests در #C را برای دانلود قرار داده ام. انشاالله که این پروژه برای شما مفید باشد.
- عنوان سورس : HTTP Server و پاسخ دادن به HTTP requests
- id سورس کد :37901127
- زمان انتشار مطلب : آبان ۸، ۱۳۹۶ ۰۹:۰۲
- نوع مطلب :مطلب کاربران vip
- حجم سورس کد: 9570 بایت
- فرمت فایل: zip
- در صورت وجود هرگونه نقص یا مشکلی در این پروژه ، میتونین با ارسال کردن شماره کارت تون و اعلام مشکل موجود در پروژه ، مبلغ پرداختی تون برای عضویت vip را پس بگیرین و همچنین 2 ماه عضویت vip هدیه بگیرین.
تعدادی از فایلهای درون فایل فشرده پروژه:
- AssemblyInfo.cs
- SimpleHttpServer.cs
- SimpleHttpServer.csproj
- SimpleHttpServer.csproj.user
- SimpleHttpServer.sln
فولدر(ها):
- SimpleHttpServer
- Properties
تصاویر مربوط به این پروژه :
یک 2 نظر
علی
ممنون از مطالب مفید سایتتون
ali
توضیحی با استفاده از ترجمه ماشینی:
این مقاله یک کلاس کارگزار HTTP ساده را پوشش میدهد که ممکن است در پروژههای خود وارد کنید , یا در مورد پروتکل HTTP بررسی کنید .
پسزمینه
خدمات وب عملکرد بالا اغلب در webservices جامد سنگ مانند IIS ، آپاچی ، یا Tomcat میزبانی میشوند . با این حال ، HTML یک زبان UI انعطافپذیر است که میتواند برای استفاده از یک کاربر HTML از هر برنامه یا سرور backend مفید باشد . در این شرایط ، پیچیدگی بالا و پیچیدگی webserver خارجی به ندرت ارزش آن را دارد . What’s نیاز به یک کلاس HTTP ساده دارد که میتواند به راحتی برای خدمات ساده وب تعبیه شود . این کلاس به آن نیاز دارد .
استفاده از کد
اولین تجدید نظر در مورد چگونگی استفاده از کلاس ، و سپس در برخی از جزئیات چگونگی عملکرد آن . ما با subclassing HttpServer شروع میکنیم و implementations را برای دو روش انتزاعی و handlePOSTRequest فراهم میکنیم …
اگر شما پروژه نمونه را کامپایل و اجرا کنید ، باید بتوانید یک مرورگر وب انتخاب کنید . Let’s نگاهی کوتاه به what’s میاندازد که زیر کاپوت قرار دارد .
این webserver ساده به دو مولفه تقسیم میشود .
کلاس HttpServer یک TcpListener را روی درگاه ورودی باز میکند و در یک حلقه در حال وارد کردن درخواستهای اتصال TCP با استفاده از AcceptTcpClient قرار میگیرد . این اولین گام از جابجایی یک اتصال TCP است . درخواست ورودی به ” خوب شناختهشده ” ما رسید و این فرآیند یک جفت پورت جدید برای سرور ایجاد میکند تا با این مشتری ارتباط برقرار کند . این جفت جدید ، جلسه TcpClient ماست . این امر بندر آزاد ما را آزاد نگه میدارد تا ارتباطات جدید را بپذیرد . همانطور که در کد زیر میبینید ، هر بار شنونده یک TcpClient جدید را باز میکند ، HttpServer جدیدی ایجاد میکند و یک رشته جدید برای کار در آن شروع میکند . این کلاس همچنین شامل روشهای انتزاعی است که طبقه فرعی ما باید به منظور تولید پاسخ انجام دهد .
در این نقطه ، اتصال TCP سرور جدید به HttpProcessor در رشته خود به دست میآید . کار HttpProcessor’s این است که به درستی headers HTTP را تجزیه و کنترل کنید و کنترل دستی را برای پیادهسازی روش صحیح انتزاعی کنترل کنید . Let’s فقط به چند قسمت از پردازش سر HTTP نگاه میکند . خط اول درخواست HTTP شبیه زیر است :
دریافت / myurl HTTP / ۱.۰
پس از راهاندازی جریان ورودی و خروجی در فرآیند ( ) ، HttpProcessor ما parseRequest ( ) را فراخوانی میکند که در آن خط درخواست HTTP بالا و تجزیه میشود .
برای هر خط ، ما به دنبال کولون میگردیم ( لبخند : ) جداکننده ، گرفتن نخ قبل از یک نام ، و رشته بعد از یک مقدار . وقتی به یک خط خالی میرسیم , به این دلیل باز میگردیم که همه headers را دریافت کردهایم .
در این مرحله ، ما به اندازه کافی برای کنترل simple یا پست خود میدانیم ، بنابراین به متصدی مناسب ارسال میکنیم . در مورد یک پست ، trickiness برای رسیدگی به دادههای پست وجود دارد . یکی از headers این درخواست شامل طول محتوا است . در حالی که ما میخواهیم به subclass’s اجازه دهیم که در واقع با دادههای پست سروکار داشته باشیم ، باید فقط به آنها اجازه دهیم تا از بایت طول تقاضا کنند . در این سرور ساده ، ما این وضعیت را با استراتژی کثیف اما موثر خواندن تمام دادههای پست به یک MemoryStream قبل از ارسال این دادهها به مربی پست کنترل میکنیم . این برای تعدادی از دلایل ایدهآل نیست . اول ، دادههای پست ممکن است بزرگ باشند . در واقع ممکن است یک فایل بارگذاری باشد که در آن بافر آن را در حافظه ذخیره میکند و یا حتی ممکن نیست . در حالت ایدهآل ، ما نوعی جریان – imitator ایجاد میکنیم که میتواند برای محدود کردن خود به بایت طول محتوا آماده شود ، اما در غیر این صورت به عنوان یک جریان معمولی عمل میکند . این امر به مربی چاپار اجازه میدهد تا دادهها را مستقیما از جریان خارج کند بدون اینکه سربار بافر در حافظه باشد . با این حال ، این کد بسیار بیشتر است . در بسیاری از سرورهای جاسازیشده HTTP ، درخواستهای پست لازم نیست ، بنابراین ما از این وضعیت با محدود کردن دادههای ورودی پست به بیش از ۱۰ MB اجتناب میکنیم
سادهسازی دیگر این سرور ساده ، نوع محتوایی دادههای بازگشت است . در پروتکل HTTP ، سرور همیشه مرورگر MIME را که باید انتظار آن را داشته باشد ، ارسال میکند . شما میتوانید ببینید که این سرور همیشه یک نوع محتوا / html را نشان میدهد . اگر میخواهید انواع دیگر محتوا را باز کنید ، باید این روش را گسترش دهید تا به مربی خود اجازه داده شود تا قبل از ارسال دادهها به مشتری پاسخ دهد .