بطور کلی هر کامپیوتر ( به ازای هر کارت شبکه اش ) یک IP دارد، که از طریق این IP می توان به ماشین فوق دسترسی پیدا نمود. این آدرس ( IP ) به 653535 پورت ( PORT ) تقسیم می شود. PORT یک مفهوم منطقی است که به کمک آن می توان بطور همزمان با چندین ماشین دیگر، ارتباط برقرار نمود.
PORT ها به دو گروه رزرو شده (پورت های بین 1 تا 1024) و غیر رزرو شده (سایر پورت ها) تقسیم می شوند. پورت های رزرو شده برای کاربردهای استاندارد مورد استفاده قرار می گیرند. مانند :
USAGE |
PORT NUMBER |
SMTP |
25 |
HTTP |
80 |
POP |
110 |
News Server |
119 |
در برنامه های Server/ Client از PORT های غیر رزرو شده که آزاد باشند ( مورد استفاده سایر برنامه ها نباشند) می توان جهت برقراری ارتباطات مورد نیاز، استفاده نمود. یعنی می تواند به ازای هر پورت با یک برنامه ارتباط برقرار کند.
======================================
سوکت یک ارتباط قابل اطمینان جهت انتقال داده ها بین دو host (ماشین مورد نظر) می باشد. سوکت، برنامه نویسان را از پیچیده گی های فرآیند برقراری ارتباط بین دو ماشین مانند جزئیات کد کردن بسته ها، فرآیند ارسال داده ها در شبکه، ارسال مجدد بسته های خراب و ... دور می سازد و برنامه نویسان به راحتی قادر به توسعه برنامه ها یتحت شبکه می باشند.
یک سوکت در حقیقت ترکیبی از IP یا HostName و یک شماره پورت ( Port Number ) از آن IP می باشد.
بطور کلی یک سوکت چهار عمل اصلی زیر را انجام می دهد:
«1» اتصال به ماشین راه دور
«2» ارسال داده ها
«3» دریافت داده ها
«4» بستن یا خاتمه اتصال
توجه به این نکته مهم می باشد که یک سوکت در یک زمان فقط قادر است تا فقط با یک ماشین (host) ارتباط برقرار کند.
با توجه به تعاریف فوق، می توان به راحتی تفاوت PORT و SOCKET را درک نمود.
======================================
«3» پروتکل Transmission Control Protocol ) TCP ) فهرست مطالب
پروتکلی برای انتقال داده ها (سرویس ها) بین دو ماشین با ضریب اعتماد بالا می باشد. چنین ارتباطی (بین دو نقطه) را Unicast می نامند. TCP پروتکل اتصال گرا ( Connection - Oriented ) است یعنی ارتباط برقرار شده بین کلاینت و سرور تا پایان روند انتقال اطلاعات باقی می ماند. این پروتکل در مواردی که اطمینان از انتقال صحیح داده ها بین مبدا و مقصد بسیار مهم است ( مانند زمان دانلود کردن داده ها) مورد استفاده قرار می گیرد. در چنین حالتی کامپیوتر مقصد با دریافت صحیح هر بسته از مبدا یک Acknowledgment به منظور اطلاع از دریافت صحیح و بی عیب به ماشین مبدا ارسال می کند. اگر پیغام اعلام وصول فوق به مبدا نرسد، مبدا دوباره بسته را ارسال می کند.
======================================
«4» پروتکل User Datagram Protocol ) UDP ) فهرست مطالب
پروتکل فوق یک پروتکل بدون اتصال (Connection - Less) می باشد. این پروتکل امکان توزیع داده ها را با سرعت بالا تضمین می کند، ولی هیچ تضمینی در جهت صحت ارسال داده ها و دریافت آنها توسط ماشین مقصد ارائه نمی دهد. بر اساس شرایط این پروتکل اگر در روند انتقال اطلاعات مشکلی پیش آید و بسته ارسال شده به صورت کامل به مقصد نرسد،بسته فوق مجددا برای کامپیوتر مقصد ارسال نخواهد شد.
«نکته» از پروتکل فوق به منظور انتقال داده ها به چندین ماشین با استفاده از BroadCast و یا MultiCast استفاده می شود.
به عنوان مثال، در سایتهایی که اقدام به پخش موسیقی از طریق اینترنت می نمایند، از این پروتکل استفاده می شود. در بعضی لحظات در حین گوش دادن به موسیقی متوجه قطع و وصل شدن یا مکث در پخش موسیقی می شویم. علت این امر نرسیدن یک یا چند بسته از بسته های ارسالی می باشد.
======================================
«5» تفاوت serverSocket و datagramSocket چیست؟ فهرست مطالب
بسته به نوع برنامه ای که ایجاد می کنیم، می توان از datagramSocket یا serverSokect استفاده نماییم. اگر برنامه ما بر مبنای پروتکل UDP باشد ازdatagramSocket و اگر بر مبنای پروتکل TCP باشد از serverSokect استفاده می کنیم. همانطور که گفته شد، پروتکل TCP جهت ارسال داده ها همراه با تضمین موفقیت آمیز بودن عمل انتقال مانند دانلود و از پروتکل UDP جهت ارسال داده ها با سرعت بالا، اتصال به چند ماشین به طور همزمان و بدون تضمین موفقیت آمیز بودن عمل انتقال مانند کاربردهای RealTime از جمله ویدئو کنفرانس، Internet TV و ... استفاده می شود.
هر دو Socket فوق در سمت ماشین سرور ایجاد می شوند. زمانی که یک ماشین سرور بخواهد از طریق یکی از پورتهایش منتظر رسیدن درخواست اتصال یک کلاینت شود ( در اصطلاح در حال Listen کردن است) ابتدا باید یک سوکت از یکی از نوع های فوق ایجاد کند. سپس پورت مورد نظر را به آن متصل ( Bind ) نموده و به حالت انتظار فرو می رود.
«نکته» اگر شماره پورتی که می خواهیم با serverSocket مورد نظرمان Bind کنیم، توسط سوکت دیگری در حال استفاده باشد، با پیغام خطای زیر مواجه می شویم.
java.net.BindException
======================================
«6» بررسی روند برقراری ارتباط بین کلاینت و سرور فهرست مطالب
در برنامه های کلاینت/سروری یا اصطلاحا برنامه نویسی تحت Socket در جاوا، روند برقراری ارتباط بین برنامه کلاینت و برنامه سرور بصورت زیر می باشد:
«1» ابتدا برنامه سرور بر روی ماشین خود اجرا شده و پورتی که در برنامه جهت دریافت درخواست های کلاینت تعیین گردیده است، گوش می دهد. همانطور که گفته شد در این مرحله، برنامه سرور باید یک سوکت از نوع serverSocket یا datagramSocket ایجاد نماید.
«2» برنامه کلاینت اجرا شده و با توجه به IP یا HostName سرور و شماره پورتی که سرور به آن گوش می دهد، درخواستی را به سمت سرور و به جهت برقراری ارتباط ارسال می کند.
«3» در این مرحله برنامه سرور درخواست کلاینت را از پورت مشخص شده، دریافت می نماید و اگر همه چیز خوب پیش رود و کلاینت مورد تایید سرور قرار بگیرد، برنامه سرور ابتدا یک پورت دیگر را از سمت ماشین سرور به طور خودکار انتخاب کرده و بر اساس آن یک سوکت جدید ایجاد می کند و به برنامه کلاینت اختصاص می دهد.
«4» برنامه کلاینت نیز در ماشین کلاینت یک سوکت بر اساس پورتی که از طریق آن با سرور ارتباط برقرار نموده، ایجاد می کند.
پس از انجام چهار مرحله فوق، یک ارتباط دو طرفه که در هر یک از دو سر آن یک سوکت قرار دارد، بوجود آمده و دو برنامه قادر به برقراری ارتباط با یکدیگر می باشد.
«نکته» در زمان ایجاد سوکت در برنامه کلاینت، نیازی نیست که برنامه کلاینت پورتی با شماره یکسان نسبت به شماره پورت برنامه سرور انتخاب کند.
کلید واژه:
برنامه نویسی سوکت ، Socket چیست ، کار با سوکت ها در جاوا ، ارتباط کلاینت ( Client ) و سرور ( Server ) از طریق سوکت ( Socket )
- ۱ نظر
- ۰۱ تیر ۹۳ ، ۱۲:۵۰