مفاهیم پایه برنامه نویسی شبکه در زبان Python – بخش دوم

  • جمعه ۱۹ آبان, ۱۳۹۶
  • ۳۷۹۶ بازدید
مفاهیم پایه برنامه نویسی شبکه در زبان Python – بخش دوم
4 (80%) 1 vote

در بخش نخست از این آموزش نمونه کدی از برنامه نویسی سوکت در پایتون را در دسترس قرار دادیم و به توضیح آن پرداختیم؛ این که چطور برای برنامه نویسی سوکت یا شبکه به زبان پایتون می بایست یک سرور و در طرف دیگر یک کلاینت داشته باشید. در بخش دوم از سری آموزش برنامه نویسی شبکه به زبان Python کوشش می کنیم از مفاهیم پایه برنامه نویسی شبکه در زبان Python آغاز کنیم و تا پایان همراه شما در یادگیری این بخش از برنامه نویسی پایتون باشیم.

سطوح برنامه نویسی شبکه در Python

Python دو سطح از دسترسی به سرویس های شبکه را فراهم می کند، در سطح پایین، می توانید به پشتیبانی اولیه از سوکت در پایه سیستم عامل دسترسی داشته باشید که به شما امکان استفاده از هر دوی کلاینت و سرور برای پروتکل های بدون نیاز به اتصال (Connection Less) و اتصال محور (Connection Oriented) را می دهد.

همچنین Python کتابخانه هایی دارد که دسترسی سطح بالا به پروتکل های خاصی از شبکه در سطح برنامه های کاربردی، مانند FTP، HTTP و… را فراهم می کند. در این بخش آموزشی برنامه نویسی شبکه Python درباره مفاهیم بنیادی برنامه نویسی شبکه در زبان Python توضیح خواهیم داد.

سوکت چیست؟

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

کار سوکت ها برقراری ارتباط است.

سوکت ها ممکن است در انواع مختلفی از کانال های ارتباطی جای بگیرند. برای نمونه سوکت های بستر Unix عبارتند از TCP, UDP و… کتابخانه سوکت کلاس های خاصی را برای کار کردن با تبادلات رایج در کنار ارائه یک رابط عمومی در اختیار قرار می دهد. در برنامه نویسی سوکت یک سری اصطلاح ها و واژه ها وجود دارد که می بایست با معنی هر کدام آشنا باشید.

1domain

خانواده پروتکل ها که برای ساختار های تبادل استفاده می شود. این ها مقداری ثابت مانند AF_INET, PF_INET, PF_UNIX, PF_X25 و… هستند

2type

نوع ارتباط ها بین دو نقطه پایانی (سوکت ها) که معمولا SOCK_STREAM برای پروتکل های اتصال محور و SOCK_DGRAM برای بدون نیاز به اتصال است.

3protocol

معمولا صفر است که ممکن است برای شناسایی نوع پروتکل به همراه یک domain و type استفاده شود.

4hostname

شناساگر یک رابط شبکه که ویژگی های زیر را داراست:

  • می تواند یک رشته (String)، آدرسی 4 بخشی جدا شده با نقطه یا یک آدرس IPV6 باشد.
  • یک رشته “<broadcast>” که یک آدرس INADDR_BROADCAST را مشخص می کند.
  • یک رشته به طول صفر INADDR_ANY را مشخص می کند. یا
  • یک رقم Integer به عنوان یک آدرس دودویی در host byte order تفسیر می شود.
5port

هر سروری که قرار است به کلاینت خود سرویس بدهد، منتظر درخواست کلاینت (مشتری) خود روی یک یا چند پرت خواهد بود. پرت می تواند یک عدد ثابت، یک رشته حاوی شماره پرت یا نام یک سرویس باشد. برای نمونه FTP نام یک سرویس با پرت معمول 21 است که می توان از هر دوی شکل عددی و نام سرویس در معرفی پرت در برنامه نویسی شبکه استفاده کرد.

ماژول سوکت در Python

برای ساخت یک سوکت، باید از تابع socket.socket() که در ماژول سوکت در دسترس است، استفاده کنید. Syntax تابع سوکت در زبان Python به شکل زیر است.

s = socket.socket (socket_family, socket_type, protocol=0)

پارامتر هایی که به این تابع داده می شود عبارتند از :

  • socket_family – می تواند یکی از دو مقدار AF_UNIX یا AF_INET باشد که هر کدام را بالاتر توضیح دادیم.
  • socket_type – می تواند یکی از دو مقدار SOCK_STREAM یا SOCK_DGRAM باشد.
  • protocol – معمولا کاری به این پارامتر نداریم و آن را مقدار دهی نمی کنیم ولی به صورت پیشفرض 0 است.

در توضیح دستور بالا باید بگوییم که در واقع با نوشتن این دستور شی از سوکت را با پارامتر های مورد نیاز می سازید و در متغیر s قرار می دهید.

در بحث برنامه نویسی شبکه یا سوکت دو سمت را در نظر می گیریم. Client (مشتری) که قرار است سرویس یا خدمتی را دریافت کند و Server (سرویس دهنده) که سرویسی را به مشتری ارائه می دهد. هر دو طرف برای ارتباط با یکدیگر می بایست از سوکت استفاده کنند.

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

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

1s.bind()

این متد آدرس (شامل جفت Hostname و شماره Port) را درگیر و برای سوکت اشغال می کند.

2s.listen()

این متد شنونده TCP را تنظیم و آغاز می کند. برای ارسال و دریافت درخواست های درون یک شبکه می بایست TCP درخواست ها را بشنود.

3s.accept()

این دستور اتصال TCP کلاینت را می پذیرد و تا زمانی که درخواست اتصالی از راه برسد منتظر می ماند (روند اجرای برنامه را منتظر می گذارد)

متد های سوکت سمت کلاینت زبان Python

1s.connect()

این متد اتصال TCP به سرور را راه اندازی می کند.

متد های کلی سوکت زبان Python

1s.recv()

این متد پیام های TCP را دریافت می کند.

2s.send()

این متد پیام های TCP را انتقال می دهد.

3s.recvfrom()

این متد پیام های UDP را دریافت می کند.

4s.sendto()

این متد پیام های UDP را انتقال می دهد.

5s.close()

این متد سوکت را می بندد. (پایان کار سوکت)

6socket.gethostname()

Hostname را بر می گرداند.

در بخش این آموزش که پیوند آن را در ابتدای این نوشته آموزشی قرار دادیم، نمونه ای از یک برنامه سرور و کلاینت را توضیح داده ایم و کد آن را نیز گذاشته ایم.

ماژول های اینترنت زبان Python

فهرستی از ماژول های مهم در برنامه نویسی اینترنت/شبکه پایتون را در جدول زیر آورده ایم.

پروتکلعملکرد رایجشماره پرتماژول پایتون
HTTPبرای صفحات وب80httplib, urllib, xmlrpclib
NNTPتازه های Usenet119nntplib
FTPانتقال فایل20ftplib, urllib
SMTPارسال ایمیل25smtplib
POP3دریافت ایمیل110poplib
IMAP4دریافت ایمیل143imaplib
Telnetخطوط فرمان23telnetlib
Gopherانتقال اسناد70gopherlib, urllib

اگر می خواهید از عملکرد های رایج نام برده استفاده کنید می بایست ماژول های پایتون معرفی شده ویژه هر کدام را مطالعه کنید. مثلا برای استفاده از FTP می بایست کتابخانه ftplib و urllib را بخوانید. این سری آموزش ادامه دار است و بزودی بخش های تازه تری به آن افزوده می شود. با کدفنجونی همراه باشید.

مفاهیم پایه برنامه نویسی شبکه در زبان Python – بخش دوم
4 (80%) 1 vote
برای دریافت تازه‌ترین ها به کانال تلگرامی کدفنجونی بپیوندید : cupcode_ir@

دیدگاه خود را در میان بگذارید

@

اگر ربات نیستید به پرسش پاسخ دهید! * Time limit is exhausted. Please reload the CAPTCHA.