مرجع تخصصی زبان Csharp
جستجو

آموزش سوکت نویسی به زبان csharp قسمت اول

در این پست قصد داریم تا آموزش صحیح برنامه نویسی سوکت را ارائه دهیم.


در این پست، بخش سرور مربوط به راه اندازی  سوکت را ارائه و تقدیم خواهیم کرد.

در شبکه، همیشه یک سمت سرور (خدمات دهنده)، و در سمت دیگر نیز کلاینت (خدمات گیرنده یا مشتری)  وجود دارد، سرور ها خدمات می دهند، و کلاینت ها خدمات می گیرند، پس هر چیزی که به اینترنت وصل می شود و به نحوی درحال تعامل با آن است، یک مشتری محسوب می شود و در طرف مقابل یک سرور است.

تمامی پیام رسان ها (واتساپ، اینستاگرام، سروش، ایتا و...)، تمامی وب سایت ها حتی ایمیل ها (مثل جیمیل و...) همه و همه دارای یک سمت خدمات دهنده یا Server هستند و تمامی افرادی که از این خدمات استفاده می کنند نیز به نحوی مشتری یا client در نظر گرفته می شوند.

در قسمت نیز برنامه ای ساده را خواهیم نوشت که نقش یک سرور را در یک شبکه (هم شبکه لن LAN و هم شبکه بزرگتری مثل اینترنت) ایفا می کند، و در پست بعدی نیز یک کلاینت را تعریف می کنیم.

برای شروع سوکت نویسی باید چند اصل را درنظر بگیریم:

  1. وسعت برنامه 
    1. صرفا یک نرم افزار پیام رسان است
    2. یک پیام رسان مشترک بین چند کاربر (نهایتا 10 نفر)
    3. یک سیستم پیام رسان مربوط به یک اداره یا سازمان است
    4. یک سیستم پیام رسان عمومی در بستر اینترنت ملی
    5. یک سیستم پیام رسان جهانی در فضای اینترنت
  2. زیرساخت مورد استفاده
    1. شبکه داخلی لن  (LAN) مابین چند سیستم محدود
    2. شبکه داخلی سازمانی
    3. شبکه  ملی اینترانت
    4. شبکه عمومی اینترنت 

برنامه نویسی یک سرور ساده به زبان csharp

✅نکته به شدت مهم این است که فایروال به برنامه شما می بایست مجوز دسترسی به شبکه (Private و Public) را بدهد،  در غیراینصورت برنامه شما نمی تواند به درستی کار کند.

//ایجاد یک سوکت سمت سرور ساده 
  void simple_server()
  {
      Socket server = new Socket(AddressFamily.InterNetwork , SocketType.Stream , ProtocolType.Tcp);
      //ایجاد سوکت جدید به اسم دلخواه
      IPEndPoint myIP = new IPEndPoint(IPAddress.Parse("0.0.0.0"), 8000);
      //اینکه سوکت روی چه آی پی منتظر کاربران باشد
      server.Bind(myIP);
      //بایند کردن سوکت روی آی پی و پورت مورد نظر
      server.Listen();
      //منتظر ماندن برنامه به جهت اتصال یک کاربر
      var client = server.Accept();
  }

در خط اول یک متغیر به اسم server ایجاد کردیم که از نوع socket است.

سپس یک سوکت جدید ساختیم و مقادیر مورد نظر را در آن وارد کردیم، این موارد مشخص می کند که سوکت ما چطور عمل کند،  این موارد به ترتیب شامل درگاه اتصال (InterNetwork)، نوع سوکت (Stream) و پروتکل ارتباطی (Tcp) می باشد.

پس از تعریف  سوکت، نوب Bind کردن است، برای بایند کردن نیاز داریم تا مشخص کنیم که سوکت از طریق چه مسیری بتواند با کلاینت ها ارتباط بگیرد، پس نیاز است مسیر EndPoint مشخص بشود که شامل یک IP و یک PORT است. ما برای اینکه سوکت بتواند تمامی به اصطلاح Interface ها را گوش بدهد (listen) از شناسه 0.0.0.0 استفاده کردیم و سپس پورت قراردادی در برنامه خودمان که در این مثال از 8000 استفاده شده است را معرفی کرده ایم. و در خط آخر نیز سوکت تعریف شده را فعال می کنیم تا منتظر درخواست هریک از کلاینت ها بماند.

در یک کلام، ما از طریق این چند خط به سیستم عامل اعلام می کنیم که اگر درخواستی با پروتکل tcp به سمت هرکدام از کارت های شبکه یا interface ها که آمد برنامه ما بتواند آن را بررسی کند.

بسیار عالی،  اگر درخواستی به سمت سرور ما ارسال شود، در خط آخر که مهم ترین قسمت این کد است، درخواست به اصطلاح تایید می شود و اطلاعات کاربر جدید ما در متغیر client ذخیره می شود، حال می توانیم از طریق این متغیر (client) ارتباطات دیگری مانند ارسال/دریافت پیام و... را داشته باشیم. 

✅این برنامه هم ناقص است، و هم از لحاظ پایداری کاملا ضعیف است، زیرا نیاز است تا حالت های مختلف ارتباطی، خطاهای ممکن و سایر مشکلات را در آن بررسی و مدیریت کنیم

✅در این کد هنوز هیچ اطلاعاتی رد و بدل نشده است و صرفا تااین مرحله فقط یک سوکت نوشته شده است که بدون هیچ ارسال/دریافت اطلاعاتی منتظر درخواست کاربران می ماند.

✅برنامه در خط server.Listen منتظر می ماند تا یک کلاینت درخواستی ارسال کند و سپس به خط بعد می رود.

با همراه باشید تا نسخه کلاینت را و تعریف های مورد نیاز را در پست بعدی  بسازیم.

تعداد صفحات: 1
💬 نظرات کاربران
💬ثبت نام کاربران
💬ورود کاربران