تبلیغات

Socket Programming چیست؟

نوشته شده توسط هادی اکبرزاده

چکیده مطلب : سوکت یا پریز، درواقع کانال ارتباطی ما با چیز دیگری در برنامه است.

Socket Programming چیست؟

به طور کلی، هر کامپیوتر ( به ازای هر کارت شبکه اش ) یک IP دارد، که از طریق این IP‌ می توان به ماشین فوق دسترسی پیدا نمود. این آدرس ( IP ) به 653535 پورت ( PORT ) تقسیم می شود.

PORT یک مفهوم منطقی است که به کمک آن می توان بطور همزمان با چندین ماشین دیگر، ارتباط برقرار نمود.

PORT ها به دو گروه رزرو شده (پورت های بین 1 تا 1024) و غیر رزرو شده (سایر پورت ها) تقسیم می شوند. پورت های رزرو شده برای کاربردهای استاندارد مورد استفاده قرار می گیرند. مانند:

در برنامه های Server/ Client از PORT های غیر رزرو شده که آزاد باشند ( مورد استفاده سایر برنامه ها نباشند) می توان جهت برقراری ارتباطات مورد نیاز، استفاده نمود. یعنی می تواند به ازای هر پورت با یک برنامه ارتباط برقرار کند.

سوکت (Socket) یا پریز یا کانال در «شبکه»

با یک بیان ساده  می توان گفت که سوکت به ترکیب یک آدرس ماشین ( IP ) و یک شماره  درگاه ( Port ) گفته می شود.
در برقراری ارتباط بین کامپیوتر ها در یک شبکه دو چیز بسیار مهم است
  1. آدرس ماشینی که می خواهیم اطلاعاتی از ان بگیریم یا به آن ارسال کنیم
  2. برنامه ای از آن ماشین که در خواست اطلاعات کرده یا اینکه می خواهیم اطلاعاتی از آن برنامه کسب کنیم.

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

یک سوکت در حقیقت ترکیبی از IP یا  HostName و یک شماره پورت ( Port Number ) از آن IP می باشد.
بطور کلی یک سوکت چهار عمل اصلی زیر را انجام می دهد:

  1. اتصال به ماشین راه دور
  2. ارسال داده ها
  3. دریافت داده ها
  4. بستن یا خاتمه اتصال

نکته: یک سوکت در یک زمان فقط قادر است تا فقط با یک ماشین (host) ارتباط برقرار کند.

با توجه به تعاریف فوق، می توان به راحتی تفاوت PORT و SOCKET‌ را درک نمود.

تعریفی مفید از سوکت

اول یک تعریفی از پروتکل داشته باشیم:
قراردادها و استانداردهایی که تعیین میکنند که برنامه های مختلف چطور با هم صحبت کنند. چیزاهایی مثل HTTP و FTP و SMTP و POP3
پروتکل مثل زبان است. مثلا زبان انگلیسی، عربی، فارسی و غیره.
و سوکت یک دستگاه ارتباطی مثل تلفن است.
شما با تلفن زنگ می زنید به طرف مقابل و او گوشی را بر می دارد؛ حالا یک کانال ارتباطی بین شما وجود دارد که می توانید از طریق آن صدای همدیگر را بشنوید.
اما فقط توانایی تبادل صدا کافی نیست، بلکه نیاز هست طرفین به زبان مشترکی صحبت کنند تا حرف همدیگر را متوجه شوند. این زبان مشترک همان پروتکل ها هستند.
در ارتباطات شبکه قراردادهايی استفاده می شود تحت عنوان Protocol ,  پروتکول های مختلفی ايجاد شده، اما در ارتباطات اينترنتی و شبکه هايی که ارتباط ۲ طرفه است، بيشتر از نوع ( TCP/IP ) استفاده مي شود که اساس آن به صورت خيلی مختصر این گونه است:
برای هر کامپيوتر که به شبکه (اینترنت هم یک شبکه است!!) وصل شود يک IP مخصوص به خودش را دارد و به نوعی آدرس آن کامپيوتر محسوب مي شود که تمام خصوصيات يک آدرس را که مي شود متصور شد داراست .

اما چرا گفتم در شبکه هايی که ارتباط ۲ طرفه نياز است از ( TCP/IP ) استفاده ميشود؟
چون انواع ديگری هم از جمله UDP هستند که تقريبا ارتباط يک طرفه مي باشد، مثلا برای پخش برنامه های راديويی.


  • اصلی ترين عامل در يک ارتباط شبکه ای، Socket مي باشد که اعمال شبکه را به صورت خواندن و نوشتن در يک فايل شبيه سازی نموده است.
  • سوکت در اصل مانند يک کانال ارتباطی است که ميان دو نقطه ايجاد شده و اطلاعات رد و بدل مي شود.
  • برای داشتن يک ارتباط شبکه ای بايد يک سوکت ايجاد کنيم که لازمه ی اين کار اين است که بدانيم به قصد برای گوش دادن می خواهیم ايجاد کنیم يا برای فرستادن پيام.
    اگر برای فرستادن پيام باشد که واضح است نياز به آدرس مقصد داريم . اما اين کافی نيست !!!

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

در ضمن یک چیز مهم این است که  بدانید IP v4 از ۴ عدد ۰ تا ۲۵۵ تشکيل شده و این 4 عدد با نقطه از هم جدا می شوند.
مثلا: ۱۶۸.۲۳.۵۶.۹۸ يک IP است اما پورت اعدادی بين ۱ تا (بصورت رایج) ۶۵۰۰۰ را می تواند شامل شود. (بله بزرگتر از این عدد هم می تواند شماره پورت شود !!!)

از آن جایی که بالاخره تعداد ارقام در مدل بالا بالاخره محدود خواهد شد، ورژن 6 به نام IP v6 به وجود آمده است که در این چا 6 عدد را شامل می شود و احتمالا نام آن نیز برای شما آشنا است.

در این جا ممکن است یک سوال پیش بیایید که بپرسید:
هر کامپيوتر فقط يک IP دارد پس يعنی در يک لحظه آيا فقط به يک کامپيوتر ميتواند وصل شود ؟؟

جواب منفی است
درست است که IP يکی بيشتر نيست اما تعداد متنهای پورت داريم
يعنی با هر پورت به يک کامپيوتر متصل مي شويم و مي توانيم تا ۶۵۰۰۰  ارتباط از صدقه سری پورتها داشته باشيم .
اما اگر سوکت برای گوش دادن باشد تنها کافییست که برای ایجاد سوکت بگوبیم با چه شماره پورتی می خواهیم ایجادش کنیم.

پروتکل Transmission Control Protocol )    TCP )

پروتکلی برای انتقال داده ها (سرویس ها) بین دو ماشین با ضریب اعتماد بالا می باشد. چنین ارتباطی (بین دو نقطه) را Unicast می نامند. ‌ TCP پروتکل اتصال گرا ( Connection – Oriented ) است یعنی ارتباط برقرار شده بین کلاینت و سرور تا پایان روند انتقال اطلاعات باقی می ماند. این پروتکل در مواردی که اطمینان از انتقال صحیح داده ها بین مبدا و مقصد بسیار مهم است ( مانند زمان دانلود کردن داده ها) مورد استفاده قرار می گیرد. در چنین حالتی کامپیوتر مقصد با دریافت صحیح هر بسته از مبدا یک Acknowledgment‌ به منظور اطلاع از دریافت صحیح و بی عیب به ماشین مبدا ارسال می کند. اگر پیغام اعلام وصول فوق به مبدا نرسد، مبدا دوباره بسته را ارسال می کند.

پروتکل User Datagram Protocol )    UDP )

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

نکته: از پروتکل فوق به منظور انتقال داده ها به چندین ماشین با استفاده از BroadCast‌ و یا MultiCast استفاده می شود.

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


منبع: f1note، pnu-club و ویکی پدیا

تبلیغات
کانال تلگرام فول کده

درباره نویسنده

هادی اکبرزاده

[ مدیر فول کده ]

دانشجوی ارشد شبیه ساز هوشمند و مدیر فول کده

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

نظرات ثبت شده 11 دیدگاه

    1. سید امیر گفت:

      سلام آقا هادی
      ممنون از مطلبتون
      بسیار شفاف و کامل توضیح داده بودید.

      اگه دوست داشتید به وبسایت من هم سر بزنید.

      1. سلام، ممنون از شما
        موفق باشید

    2. م گفت:

      ممنون از توضیحاتتون

    3. Emad گفت:

      سلام
      خیلی ممنون از مطلب کاملتون
      فقط من یک سوال داشتم من اگه بخوام یک فایل رو در شبکه بفرستم که حجمش هم زیاده چطور میتونم فایل رو به buffer های کوچک تبدیل کنم و فایل رو بفرستم

    4. مجتبی حامی گفت:

      سلام ، ممنون من تعریف سوکت رو با مثال اپارتمان در ذهنم نقش بست ،

    5. مهدی گفت:

      مطلب خوب بیان شده و قابل درک هست . ممنون

    6. احسان گفت:

      با سلام
      سپاس برای قرار دادن این مطالب مفید. من به شخصه بهره بردم. پاسخ شما.
      برادر بزرگوار من یک کامپیوتر سرور و یک کلاینت دارم که با کابل شبکه در یک توپولوژی ستاره دای مرتبط هستند. سرور اطلاعات سنسور هارو از طریق کابل شبکه میگیره و کامپیوتر کلاینت با یک نرم افزاری که روش هست بصورت نمودار نمایش میده. این رو برای شرح حال گفتم.
      اما کاری که من می خواهم انجام بدهم اینه که یک فایل با فرمت txt دارم که میخوام اطلاعاتش رو بر حسب زمانهایی که داده ها ثبت میشه روی فایل پایگاه داده با پسوند .dat روی سرور بریزم و این کار رو از طریق پورت COM انجام بدم یعنی هردو رو با Com متصل کنم. اگر طریقه انجام این کار رو برای پورت USB هم بگید ممنون میشم.
      در مورد سطح خودم هم باید بگم تا حالا برنامه تحت شبکه ننوشتم و این اولین بارمه. (با C# کار میکنم)
      سپپپپپپاس فراوان. پیشاپیش.
      امیدوارم که سوالم رو در مکان مناسبی پرسیده باشم. اگر باید جای خاصی سوالم رو مطرح کنم ممنون میشم راهنمایی کنید.

    7. احسان گفت:

      پاسخ شما= سپاس برای پاسخ شما.

    8. Morteza گفت:

      dadash damet garm

    9. Sina گفت:

      agha vaghean dame shoma garm. belakhare ye matlabe kamelo vazeh payda kardam