برنامه نویسی شبکه

 
voiceofrain
voiceofrain
کاربر نقره ای
تاریخ عضویت : تیر 1391 
تعداد پست ها : 2005
محل سکونت : اصفهان

برنامه نویسی شبکه

مقدمه :

برای مهندسان برق و کامپیوتر  ، یکی از حوزه هایی که میتواند مشترک باشد ، حوزه برنامه نویسی شبکه است. بنابراین دانستن ان میتواند به تولید راه حلهای خوب ترکیبی سخت افزار ، شبکه و نرم افزار منجر شود.

مثلا می توان به فکر طراحی سیستمهای سخت افزاری بود که دیتا را از سنسورهای متفاوت جمع می کنند و توسط GPRS و یا اینترنت بر روی یک وب سایت منتشر مینماید. حال این دیتا میتواند تصویر ، عکس و یا داده هایی مانند دما و رطوبت و گاز و میزان نور و .... باشد. بنابراین برنامه نویسی شبکه می تواند حوزه ه ای مشترک محسوب شود. در این در این مجموعه مقالات سعی می شود که این دانش به تفصیل در اختیار کاربران قرار گیرد. مجموعه حاضر با توجه به .NET FrameWork و زبان برنامه نویسی  Visual Basic استفاده شده است.

مفاهیم برنامه نویسی :

کسانی که با برنامه نویسی در .NWT Framework آشنا هستند ، با namespace ها ( فضا های نامی) نیز آشنا هستند. دو فضای نامی که در برنامه نویسی شبکه مورد استفاده قرار میگیرد ، عبارت است از :

-          System.Net

-          System.net.Sockets

در واقع در ابتدای کلاس و یا فرم مورد نظر، ابتدا باید این دو فضای نامی را در CodeView وارد نمود.

کلاسهای کلیدی مرتبط با برنامه نویسی شبکه :

به زبان ساده ، برنامه نویسی شبکه ، درباره حرکت فیزیکی بیتها از یک نقطه مانند A به نقطه B ، از طریق یک سیم و پاسخ دادن به داده هایی است که از نقطه A به نقطه B  در طول شبکه حرکت کرده است. به طور مفهومی این یک عمل ساده است. اما در عمل ممکن است بسیار پیچیده باشد. .net Framework Class Library یک ساختار بسیار کاربردی از کد به ما ارائه می دهد که می تواند ما را از پیچیدگیها منفک نماید و  ما را در معرض مفاهیم سطح پائین شبکه قرار دهد.

برنامه نویسان آشنا با برنامه نویسی سوکتهای ویندوز، حس راحتی دارند هنگامیکه می خواهند چنین برنامه هایی بنویسند . زیرا که آنها کافیست که با فضاهای نامی معرفی شده در زیر کار کنند.

-          System.Net

-          System.net.Sockets

در واقع آنها پی برده اند که کار با این دو کلاس بسیار آسانتر از کار کردن با توابع قدیمی است که به شکل پراکنده و بدون طبقه بندی در اختیارشان بود. جدول زیر کلاسهایی  را که برای برنامه نویسی نیاز داریم را معرفی میکنیم.

نام کلاس

شرح

Socket Classes

Socket

این کلاس سوکت شبکه را نشان می دهد. در پلت فرم ویندوز ، این کلاس WinSock API را در خود جای می دهد.

SocketException

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

TCP/UDP

TCPClient

این کلاس به شما اجازه می دهد که اتصالات TCP را به یک سرور راه دور (  Remote Server ) برقرار نمایید. این کلاس انتزاعی تر است و در بالای سطح عملیات سوکت قرار دارد.

TcpListener

این کلاس ، اجازه می دهد که به نرم افزارهای دیگر گوش دهد و عملیات مناسب را در مقابل اتصالی که از یک client برقرار شده است را پاسخ گوید.

udpclient

شبیه به کلاس tcpclient است . این کلاس مشخصا با پروتکل UDP تعامل دارد.

HTTP Request / Response Classes

HTTPwebrequest

این یک نسخه کاربردی از کلاس Webrequest است و مخصوصا برای کار با پروتکلHTPP طراحی شده است.

HTTPWEBResponse

این یک نسخه کاربردی از کلاس webresponse است و مخصوصا طراحی شده است برای کار با پروتکل HTTP

Generic Request / Response Classes

Filewebrequest

این کلاس به شما اجازه می دهد تا مسائل مربوط به درخواست فایل بر روی سرورهای راه دور را حل نمایید. به عبارت دیگر این کلاس درخواستهای "file://"  را کپسوله می نماید.

FileWebresponse

کلاس filewebresponse دسترسی به یک رشته فایل را بر روی سرور راه دور فراهم می اورد.

Webrequest

این کلاس درخواست از سرور Web-Based را انجام می دهد.

Webresponse

این کلاس برای پاسخگوئی سرورهای Web-Based مورد استفاده قرار میگیرد.

WebClient

این کلاس بالاترین سطح انتزاعی در پشته برنامه نویسی شبکه .net می باشد. این کلاس ارسال و دریافت داده را از یک منبع بسیار ساده مینماید.

WebException

این کلاس ، سیگنالهای خطای حادث شده در هر پروتکل شبکه پشتیبانی شده بوسیله .NET را در نظر میگیرد.

Authentication Classes

Authenticationmanager

این کلاس ماژولهای مربوط به احراز هویت در شبکه های گوناگون را در هر نرم افزاری را فراهم می نماید.

CredentialCache

این کلاس برای استفاده و بازیافت اطلاعات اعتبار سنجی در یک ذخیره گاه مرکزی ، مورد استفاده قرار میگیرد.

NetworkCredential

این کلاس یک نمونه خاص از گواهینامه های نرم افزاری و یا کاربران شبکه می باشد.

Utility Classes

Network Stream

کلاس POINT عملیات رشتهت ای مبتنی بر شبکه را پیاده سازی مینماید.

DNS

این کلاس اجازه می دهد که نامهای سرور را به IP تبدیل نماید.

IPAddress

این کلاس برای کپسوله کردن یک IP Address مورد استفاده قرار میگیرد.

IPENDPOINT

این کلاس نقطه پایانی اتصال یک شبکه را نمایش می دهد. نقطه پایانی یک شبکه معمولا توسط یک IP Address و یک نام پورت شناخته می شود.

IPHostEntry

این کلاس به منظور پیوستگی با کلاس DNS مورد استفاده قرار میگیرد.

WebProxy

این کلاس سرویسهای Proxy را که می تواند توسط Webrequest و دیگر کلاسهای مربوط به آن مورد استفاده قرار گیرد را در بر میگیرد.

 


فضاهای نامی System.Net و  System.Net.Sockets زنجیره ای از عملیات مربوط به شبکه را برای توسعه دهندگان فراهم میاورد. به عبارت دیگر اگر بخواهیم و  یا نیاز داشته باشیم که با شبکه دیگری در سطح پائین تعامل کنیم ، این کار را میتوان انجام داد.

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

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

-          سطح Socket : سطحی از عملیات که اجازه می دهد به شکل مستقیم با Datagram ها و Streamها در تعامل باشیم .نماینده این کلاس ،Socket Class است.

-          سطح Transport : این سطح از عملیات اجازه دسترسی به ویژگیهای  TCP و UDP را میدهد. کلاسهای مرکزی این گروه عبارتند ازTCPClient ،UDPClient و TCPListener .

-          سطح Application : این سطح از عملیات پایه  مبتنی بر HTTP را بر عهده دارد. کلاسهای HTTPWebRequest  و HTTPWebResponseاین سطح از کنترل را در اختیار کاربر قرار میدهد.

-          سطح پروتکل Agnostic : این سطح از عملیات اتصال آسان و ارتباط با URI را بدون نگرانی از پروتکل ارتباطی را بر عهده دارد. منظور از URLشکل کلی یک URI است . (به عنوان مثال www.microsoft.com یک URL است).کلاسهای Webrequest و webRespopnse و WebClient این سطح از عملیات را نمایش میدهند.

هر لایه از کلاسهای شبکه بر روی لایه های زیرین ساخته می شود. به عنوان یک مثال برای نمایش چگونگی استفاده از لایه های شبکه می توان این مثال را عنوان کرد:

« کلاس WebClientتنها با یک خط کد ، یک Connection را به یک URI (Uniform Resource Identifier ) باز می کند و نتیجه را بازیابی مینماید.»

با استفاده از این کلاسها دیگر نیاز نیست که نگار عملکرد و پیچیدگیهای کار باشید. حال که با مفاهیم  کلی مربوط به برنامه نویسی شبکه آشنا شدیم. حال نوبت به این می رسد که ببینیم که چگونه با استفاده از کلاسهای مربوطه ، وظایف مورد نظر با کلاسهای System.Net وSystem.Net.Sockets را انجام دهیم.با شناخت این کلاسها می توانیم نرم افزارهای در سطح شبکه را به راحتی توسعه دهیم.

 


سوکت را میتوان به شکل یک مسیر دوطرفه در نظر گرفت. در واقع دو نقطه را به یکدیگر متصل میکند و و اجازه می دهد که دیتا ازیک نقطه  به یک نقطه دیگر حرکت کند. بر اساس این تکنولوژی ، می بایست ایتدا متدی برای استفاده در TCP/IP و فراخوانی ان متد در نرم افزارهای کاربردی ساخته شود. امروزه دیگر سوکتها به شکل عمومی درامده اند و هر سوکتی که ساخته می شود می تواند به انواع روشها ارتباط برقرار نماید. از نقطه نظر یک توسعه دهنده برنامه ، ، یک سوکت چیزی است که می تواند متصل شود به جائی و اجازه دهد که داده ها از نقطه ای به نقطه دیگر ارسال و یا دریافت شود.

سوکتها تکنولوژی هسته ای نرم افزارهای کاربردی است که از طریق شبکه های IP ارتباط برقرار میکنند. برای برنامه نویسی با سوکتها از فضای نامی System.Net.Sockets استفاده میکنند.کلاس سوکت تقریبا یک کلاس انتزاعی از کتابخانه WinSock است.

باید به خاطر داشت که در .Net برای ساخت کلاسها ، نامهای System.Net و System.Net.Sockets را در بالای صفحه اضافه میکنیم.

ساخت سوکتها :

 اگر بخواهیم قیاسی بین عملکرد یک سوکت داشته باشیم ، می توان این مسئله را با تماس تلفنی مقایسه کرد : قبل از شروع به صحبت ، شما ابتدا یک شماره میگیرید . در دنیای کلاسهای شبکه این به معنای برقراری ارتباط است و این به آن معنا است که یک نمونه از کلاس سوکت ایجاد شده است.

هنگام تعامل با برنامه های مبتنی بر سوکت ، عمدتا با دو کلاس مشروح در زیر کار داریم :

  • کلاس Socket ( از فضای نامی System.Net.Sockets ) – این نماینده ، یک نمونه از اینترفیس سوکتها است.به خاطر بسپارید که یک خط لوله دوطرفه است که برای ارسال و دریافت اطلاعات در طول یک شبکه استفاده می شود.
  • کلاس IPEndpoint : ( از فضای نامی System.Net ) – این کلاس یک IP Address را کپسوله میکند. ( به عبارت دیگر آدرس نقطه نهایی یا همان انتهای لوله را نمایش میدهد.)

ساخت یک نمونه Socket کاری سرراست و آسانی است. برای اینکار به سه آرگومان نیاز داریم :

  • آدرسی که سوکت از آن استفاده میکند.
  • نوع سوکتی که ایجاد می شود.
  • نوع پروتکلی که سوکت هنگام استفاده ایجاد میکند.

انواع آدرس می تواند بر اساس جدول زیر تعیین شود :

برای هدفمان در  این مقاله ، ما از روش آدرس InterNetwork   استفاده میکنیم(برای آدرسدهی بر اساس پروتکل اینترنت). عبارت بعدی در ساخت سوکت نوع سوکت است. برای ما با توجه به انتخاب internetwork دو انتخاب وجود دارد :

  • Stream
  • Datagram

هنگامیکه ما پروتکل انتقال  TCP (مخصوصا) را انتخاب میکنیم، بهتر است از Stream استفاده میکنیم. در اینجا نیز ما stream را انتخاب میکنیم.System.Net.Sockets شامل یک Enumeration  است که مربوط به نوع سوکت است. در جدول زیر انواع این سوکتها را می بینیم.

توجه :

پروتکلهای ارتباطی مبتنی بر Stream قابل اعتمادتر و هستند. زیرا در صورت بروز خطا امکان ارسال مجدد اطلاعات را دارند. ارتباطات مبتنی بر Datagram ، سریعتر هستند ولی هیچ روش کنترل خطائی ندارند. Packet های TCP مبتنی بر Streamهستند و Packetهای UDP مبتنی بر DataGram هستند. 

آخرین پارامتر فراهم شده برای سازنده سوکت ، نوع پروتکل می باشد. دوباره یک Enumeration به داد ما می رسد. نام این Enumeration ،ProtocolType است. در جدول زیر این پروتکلها را می بینیم :

Protocoltype ای که ما در این مثال قرار است استفاده کنیم ، TCP است.

ProtocolType.Tcp

با قرار دادن اینها کنار هم میتوانیم یک سوکت بسازیم. در زیر به صورت نمونه یک سوکت را ساخته ایم:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

بـازم با گریه خوابم برد       بـازم خواب تــــو را دیدم

دوباره....

چقدر غمگینم و تنـــها  چقدر می خوام که باز بـارون بباره

 

بزن بــارون  ببار آروم  بروی پلکای خسته ام

بزن بــارون تو می دونی هنوزم یاد اون هستم

 

دوشنبه 22 آبان 1391  2:47 PM
تشکرات از این پست
دسترسی سریع به انجمن ها