تبلیغات

Socket Programming چیست؟ (برنامه نویسی سوکت)

Socket Programming چیست؟


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

PORT نیز یک مفهوم منطقی است که به کمک آن می‌توان بطور همزمان با چندین ماشین دیگر، ارتباط برقرار نمود. PORT ها به دو گروه رزرو شده (پورت‌های بین 1 تا 1024) و غیر رزرو شده (سایر پورت‌ها) تقسیم می‌شوند. پورت‌های رزرو شده، برای کاربردهای استاندارد مورد استفاده قرار می‌گیرند. مثلا: در برنامه‌های Server/Client، از پورت‌های غیر رزرو شده که آزاد باشند ( مورد استفاده‌ی سایر برنامه‌ها نباشند) می‌توان جهت برقراری ارتباطات مورد نیاز، استفاده نمود؛ یعنی می‌تواند به ازای هر پورت، با یک برنامه ارتباط برقرار کند.

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

با یک بیان سادهT می توان گفت که سوکت به ترکیب یک آدرس ماشین (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 می‌گویند. يعنی شماره پورت هم نياز است.

در ضمن یک چیز مهم این است که بدانید IPv4 (ورژن 4 آی‌پی)، از 4 عدد 0 تا 255 تشکيل شده و این 4 عدد، با نقطه از هم جدا می‌شوند. مثلا: 185.213.166.204 يک IP است (آی‌پی فول کده)! اما پورت اعدادی بين 1 تا (بصورت رایج) 65000 را می‌تواند شامل شود. (بله بزرگتر از این عدد هم می‌تواند شماره پورت شود!!!)

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

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

جواب منفی است! درست است که IP يکی بيشتر نيست؛ اما تعداد متناهی پورت داريم! يعنی با هر پورت، به يک کامپيوتر متصل می‌شويم و می‌توانيم تا 65000 ارتباط از صدقه سری پورت‌ها داشته باشيم. اما اگر سوکت برای گوش دادن باشد؛ تنها کافییست که برای ایجاد سوکت بگوبیم با چه شماره پورتی می‌خواهیم ایجادش کنیم.

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

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

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

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

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

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

برگرفته از: f1note، pnu-club و ویکی پدیا

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

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

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

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

علاقه‌مند به اشتراک گذاری اطلاعات در هر زمینه‌ای / برنامه‌نویس و دانشجوی ارشد رشته شبیه‌ساز هوشمند / همچنین در حال نوشتن یه رمان فانتزی (اگه خدا بخواد و تموم شه 😂)

پاسخ دهید

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

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

    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

    10. علی گفت:

      تعداد پورت ها رو درست گذاشتید جناب؟ 65535 نیست؟

      1. هادی اکبرزاده گفت:

        سلام. درصورتی که منظورتون ابتدای متنه بله اشتباها یک عدد بیشتر قرار گرفته. ممنون از اطلاع رسانیتون.