PDA

توجه ! این یک نسخه آرشیو شده می باشد و در این حالت شما عکسی را مشاهده نمی کنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : بررسي مفاهيم مقدماتي برنامه نويسي سوكت در جاوا



Borna66
04-30-2012, 11:55 PM
سرفصل مطالب
«1» port چيست‌؟
«2» socket چيست؟
«3» پروتكل TCP
«4» پروتكل UDP
«5» تفاوت serverSocket و datagramSocket چيست؟
«6» بررسي روند برقراري ارتباط بين كلاينت و سرور
======================================
«1» port چيست‌؟ فهرست مطالب
بطور كلي هر كامپيوتر ( به ازاي هر كارت شبكه اش ) يك IP دارد، كه از طريق اين IP‌ مي توان به ماشين فوق دسترسي پيدا نمود. اين آدرس ( IP ) به 653535 پورت ( PORT ) تقسيم مي شود. PORT يك مفهوم منطقي است كه به كمك آن مي توان بطور همزمان با چندين ماشين ديگر، ارتباط برقرار نمود.
PORT ها به دو گروه رزرو شده (پورت هاي بين 1 تا 1024) و غير رزرو شده (ساير پورت ها) تقسيم مي شوند. پورت هاي رزرو شده براي كاربردهاي استاندارد مورد استفاده قرار مي گيرند. مانند :



USAGE

PORT NUMBER



SMTP

25



HTTP

80



POP

110



News Server

119




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

http://java.tadbirpoya.ir/articles/JAVA%20SE/pic/3tcpudp.gif

======================================
«2» socket چيست؟ فهرست مطالب
سوكت يك ارتباط قابل اطمينان جهت انتقال داده ها بين دو 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‌ سرور و شماره پورتي كه سرور به آن گوش مي دهد، درخواستي را به سمت سرور و به جهت برقراري ارتباط ارسال مي كند.
http://java.tadbirpoya.ir/articles/JAVA%20SE/pic/5connect.gif
«3» در اين مرحله برنامه سرور درخواست كلاينت را از پورت مشخص شده، دريافت مي نمايد و اگر همه چيز خوب پيش رود و كلاينت مورد تاييد سرور قرار بگيرد، برنامه سرور ابتدا يك پورت ديگر را از سمت ماشين سرور به طور خودكار انتخاب كرده و بر اساس آن يك سوكت جديد ايجاد مي كند و به برنامه كلاينت اختصاص مي دهد.
http://java.tadbirpoya.ir/articles/JAVA%20SE/pic/6connect.gif
«4» برنامه كلاينت نيز در ماشين كلاينت يك سوكت بر اساس پورتي كه از طريق آن با سرور ارتباط برقرار نموده، ايجاد مي كند.
پس از انجام چهار مرحله فوق، يك ارتباط دو طرفه كه در هر يك از دو سر آن يك سوكت قرار دارد، بوجود آمده و دو برنامه قادر به برقراري ارتباط با يكديگر مي باشد.
«نكته» در زمان ايجاد سوكت در برنامه كلاينت، نيازي نيست كه برنامه كلاينت پورتي با شماره يكسان نسبت به شماره پورت برنامه سرور انتخاب كند.


كليد واژه:
برنامه نويسي سوكت ، Socket چيست ، كار با سوكت ها در جاوا ، ارتباط كلاينت ( Client ) و سرور ( Server ) از طريق سوكت ( Socket )