تا %60 تخفیف خرید برای 2 نفر با صدور مدرک فقط تا
00 00 00

آموزش جاوا (Java) قسمت 49 : برنامه نویسی سوکت و شبکه قسمت 1

مهدی عادلی فر
مهدی عادلی فر
2 پسند
4015 بازدید
3 نظر
54 ماه قبل

با سلام به همه دوستان و همراهان عزیز Itpro. یکی از قابلیت هایی که باعث می شود یک زبان برنامه نویسی محبوبیت بیشتری داشته باشد این است که آن زبان در شبکه چگونه کار می کند. کار کردن در شبکه یعنی این که برنامه بین چندین دستگاه (کامپیوتر) متصل به هم اجرا شود. منظور از متصل به هم این است که در یک شبکه به هم وصل باشند. جاوا برای کار با شبکه پکیج java.net را ارائه کرده است که شامل API های j2se یا همان نسخه استاندارد جاوا است. این پکیج شامل کلاس ها و اینترفیس هایی است که به منظور ارتباط سطح پایین بین کامپیوتر ها مورد استفاده قرار می گیرند و به شما اجازه نوشتن برنامه های شبکه ای قوی را می دهد. پکیج java.net دو پروتکل رایج زیر را پشتیبانی می کند.

  • TCP: TCP مخفف Transmission Control Protocol می باشد که یک ارتباط قابل اعتماد و ایمن (reliable) را بین دو برنامه ایجاد می کند. این پروتکل همچنین در بستر اینترنت نیز استفاده می شود که به آن TCP//IP گفته می شود.
  • UDP: UDP مخفف User Datagram Protocol بوده و یک پروتکل connection-less می باشد که اجازه می دهد بسته های اطلاعاتی در شبکه ارسال شوند. دوستانی که در مورد این مفاهیم دچار اشکال هستند به مقالات و آموزش های network+ در وب سایت تخصصی فناوری اطلاعات (Itpro) مراجعه کنند.

آموزش جاوا (Java) قسمت 49 : برنامه نویسی سوکت و شبکه قسمت 1

برنامه نویسی سوکت در جاوا

سوکت ها یک مکانیزم ارتباطی بین دو کامپیوتر را با استفاده از پروتکل TCP فراهم می آورند. برنامه کلاینت یک سوکت تعریف می کند و تلاش می کند به برنامه سرور وصل شود. وقتی که ارتباط برقرار شد برنامه سرور یک شئ سرور ایجاد می کند و با استفاده از این سوکت ها این دو برنامه به تبادل داده مشغول می شوند. ارسال داده ها با نوشتن داده در روی سوکت ها انجام می شود. کلاس java.net.Socket برای ساخت سوکت مورد استفاده قرار می گیرد و کلاس java.net.ServerSocket مکانیزمی را فراهم می آورد تا برنامه سرور بتواند به خط گوش دهد و با کلاینت ها ارتباط برقرار کند. مراحل ایجاد یک ارتباط TCP بین دو کامپیوتر توسط سوکت به شرح زیر است. دقت داشته باشید که منظور از سرور در اینجا سرور فیزیکی نیست که در شبکه مورد بحث واقع می شود بلکه منظور ما از سرور همان برنامه ای است که برنامه های دیگر به آن پیام می فرستند. منظور از پورت هم پورت نرم افزاری بوده که یک شماره دارد و با پورت سخت افزاری اشتباه گرفته نشود.

  • سرور یک شئ ServerSocket می سازد و شماره پورت ارتباط را مشخص می کند.
  • سرور متد accept را از شئ ServerSocket فراخوانی می کند. این متد منتظر می ماند تا یک کلاینت با استفاده از شماره پورت مشخص شده به سرور متصل شود.
  • بعد از این که سرور به حالت انتظار رفت، کلاینت مورد نظر یک شئ از کلاس Socket می سازد که آدرس سرور و شماره پورتی را که قرار است را برای آن مشخص می کند .
  • متد constructor کلاس Socket سعی می کند که به سرور مشخص شده با شماره پورت مشخص شده وصل شود. اگر ارتباط برقرار شد برنامه کلاینت یک شئ دارد که با استفاده از آن می تواند به سرور وصل شود و تبادل داده بکند.
  • در سمت سرور متد accept یک شئ Socket از سوکت جدید ایجاد شده برمی گرداند. با استفاده از این سوکت می توان با کلاینت مورد نظر ارتباط برقرار کرد.

بعد از این که ارتباط برقرار شد می توان با استفاده از استریم های I//O داده ها را انتقال داد. هر سوکتی هم InputStream و هم OutputStream را دارا می باشد. استریم OutputStream مربوط به کلاینت به استریم InputStream مربوط به سرور وصل می باشد و بالعکس استریم InputStream مربوط به کلاینت به استریم OutputStream مربوط به سرور متصل است. پروتکل TCP یک پروتکل دوراهه است. بنابراین داده ها همزمان می توانند ارسال و دریافت شوند. در ادامه به کلاس ها و متدهایی که برای ارتباط سوکت مناسب هستند می پردازیم.

متدهای کلاس ServerSocket

کلاس java.net.ServerSocket در برنامه سمت سرور استفاده می شود و از این کلاس برای گرفتن یک پورت و گوش دادن به درخواست های کلاینت ها به کار می رود. این کلاس 4 متد constructor دارد که این constructor ها به شرح زیر می باشند.

  1. سازنده با یک پارامتر ورودی عددی
  2. public ServerSocket(int port) throws IOException
    

این سازنده یک شماره پورت می گیرد و یک سوکت می سازد و آن شماره پورت را به سوکت مورد نظر اختصاص می دهد. اگر پورت مورد نظر به برنامه دیگری اختصاص داده شده باشد exception رخ خواهد داد.

  1. سازنده با دو پارامتر ورودی عددی
  2. public ServerSocket(int port, int backlog) throws IOException
    

این constructor شبیه به قبلی است و پارامتر backlog به این منظور است که مشخص می کند که چند عدد کلاینت در صف انتظار بتوانند منتظر بمانند به عبارت دیگر صف انتظار سرور چندتایی باشد.

  1. سازنده با دو پارامتر عددی و یک پارامتر از نوع InetAddress
  2. public ServerSocket(int port, int backlog, InetAddress address) throws IOException
    

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

  1. سازنده بدون پارامتر این سازنده هیچ پارامتری ندارد حتی شماره پورت. این سازنده یک سوکت سروری می سازد که به هیچ پورتی bind نشده است. وقتی که از این سازنده استفاده می کنید باید بعد از آن با استفاده از متد bind شماره پورت و بقیه قسمت ها را به شئ ServerSocket اختصاص دهید.

اگر سازنده ServerSocket هیچ exceptionی ندهد به این معنی است که سوکت با موفقیت ساخته شده است و به پورت مورد نظر اختصاص داده شده است و آماده است تا درسخواتس های کاربران را دریافت کند. متدهای رایج کلاس ServerSocket در ادامه آورده شده اند.

متد های معمول کلاس ServerSocket

  • متد getLocalPort: این متد پورتی را که سرور در حال گوش دادن به آن است را برمی گرداند.
  • متد accept این متد برای انتظار برای کلاینت های ورودی به کار می رود. این متد به صورت بلوکه شده باقی می ماند تا وقتی که یک کلاینت با پورت مشخص شده به آن وصل شود یا زمان انتظار سوکت به پایان برسد. دقت داشته باشید که اختصاص زمان انتظار با استفاده از متد setSoTimeout انجام می شود و اگر زمان انتظاری برای آن در نظر نگرفته باشیم انتظار به صورت بی نهایت خواهد بود.
  • متد setSoTimeout این متد برای مشخص کردن زمان انتظار به کار می رود که یک ورودی int دارد که زمان انتظار را به میلی ثانیه مشخص می کند.
  • متد bind: این متد برای زمانی که از constructor بدون پارامتر برای ساخت ServerSocket استفاده کرده باشید مناسب است که با استفاده از آن بتوانید شماره پورت و شماره IP و همچنین backlog را مشخص کنید.

تا به این بخش به معرفی کلاس ServerSocket و متدهای آن و همچنین مفاهیم اصلی socket programming پرداختیم. حال در مطلب بعدی به برنامه نویسی جاوایی سوکت و قسمت کلاینت و نحوه ارتباط خواهیم پرداخت Itpro باشید

نویسنده: مهدی عادلی فر

منبع: جزیره برنامه نویسی و توسعه نرم افزار وب سایت توسینسو

هرگونه نشر و کپی برداری بدون ذکر منبع و نام نویسنده دارای اشکال اخلاقی می باشد.

نظر شما
برای ارسال نظر باید وارد شوید.
3 نظر