آموزش منطق و مقدمات برنامه نویسی به همراه الگوریتم و فلوچارت آموزش منطق و مقدمات برنامه نویسی به همراه الگوریتم و فلوچارت
288

آموزشگاه برنامه نویسی تحلیل‌داده

با مجوز رسمی از سازمان فنی و حرفه‌ای کشور

ورود / ثبت‌نام

ورود کاربر جدید هستید؟ ثبت نام کنید
بستن تبلیغات
دوره تسلط بر پایتون ؛ آموزش پروژه محور برای حرفه ای ها

با آموزش حضوری و آنلاین مقدماتی تا پیشرفته پایتون , محبوب‌ترین زبان برنامه‌نویسی دنیا در محیطی عملی کاربردی و پروژه محور وارد دنیای برنامه نویسی شوید

مشاهده بیشتر
شروع مسیر هوش مصنوعی با دوره یادگیری ماشین پروژه‌محور!

اگه پایتون بلدی و می‌خوای وارد دنیای هوش مصنوعی بشی، این دوره مخصوص توئه! با آموزش پروژه‌محور و همراهی اساتید حرفه‌ای، یاد بگیر چطور از هوش مصنوعی تو زمینه‌هایی مثل پزشکی، بورس و املاک استفاده کنی.

مشاهده بیشتر
یادگیری عمیق از پایه تا پیشرفته، همراه با پروژه‌های واقعی!

اگه یادگیری ماشین بلدی و آماده‌ای وارد چالش‌های حرفه‌ای بشی، دوره یادگیری عمیق پروژه‌محور برای توئه! طراحی شبکه‌های عصبی و کار روی پروژه‌های واقعی مثل تشخیص تصویر و پردازش زبان رو اینجا یاد می‌گیری.

مشاهده بیشتر
دوره پروژه محور آموزش جنگو

با این دوره، Django رو از پایه شروع کن و به یک حرفه‌ای تبدیل شو! یاد بگیر چطور با معماری MVT، پایگاه داده و RESTful API کار کنی، پروژه‌های واقعی بسازی و آن‌ها رو روی وب سرور مستقر کنی!

مشاهده بیشتر
مشخصات مقاله
  • 13408
  • 0.0
  • 10314
  • 0
  • 0

برنامه نویسی تحت شبکه با ماژول socket پایتون (Python network programming)

شرح مفهوم Socket

Socket ها در واقع endpoint های موجود در یک کانال ارتباطی دو طرفه هستند. سکوت ها می توانند در بستر یک فرایند، بین دو فرایند در دستگاه واحد و یا چندین فرایند در دستگاه های مستقر در قاره و نقاط جغرافیایی مختلف با یکدیگر تبادل داده داشته باشند. از دیدگاه kernel و هسته سیستم عامل، socket صرفا نقطه ی نهایی تبادل داده و ارتباط می باشد. از دیدگاه اپلیکیشن و برنامه ی تحت شبکه، socket یک توصیف گر و شناسه ی فایل که به آن امکان و مجوز درج و خواندن داده در / از شبکه را می دهد، قلمداد می شود. Socket ترکیبی از آدرس دستگاه (IP) و آدرس درگاه (port number) می باشد.

سوکت ها بر روی انواع کانال های ارتباطی قابل پیاده سازی می باشند که از جمله ی آن ها می توان به Unix domain socket، TCP، UDP و غیره ... اشاره کرد. کتابخانه ی socket کلاس های اختصاصی ارائه می دهد که علاوه بر انتقال داده های معمولی، Interface های از نوع generic که دیگر انواع عملیات انتقال و غیره را تحت پوشش قرار می دهد، مدیریت می نماید.

برای درک مفهوم سوکت و کار با آن، لازم است با واژگان زیر آشنا شوید:

واژه
شرح
domain
خانواده ی پروتکل هایی که به عنوان مکانیزم انتقال مورد استفاده قرار می گیرد(انتقال داده در بستر شبکه بر اساس آن ها صورت می گیرد) . این مقادیر ثوابتی همچون AF_INET، PF_INET، PF_UNIX، PF_X25 و غیره .. هستند.
type
عبارت است از نوع ارتباطاتی که بین دو endpoint برقرار می شود. این معمولا SOCK_STREAM را برای پروتکل های connection-oriented (امن و تضمین دهنده ی تحویل اطلاعات) و SOCK_DGRAM را ویژه ی پروتکل های connectionless (غیر امن با سرعت بالا که تحویل داده ها را تضمین نمی کند) شامل می شود.
protocol
به طور پیش فرض بر روی 0 تنظیم می شود، این مفهوم غالبا جهت معرفی نوع دیگر از پروتکل داخل یک domain و type بکار می رود.
hostname
شناسه و اسم اینترفیس شبکه است:
یک رشته که می تواند اسم سرویس دهنده (hostname)، آدرس IP نسخه ی 4، آدرس IPV6 (آدرس IP ورژن 6) با ساختار نگارشی دو نقطه باشد. یک رشته "
" که آدرس INADDR_BROADCAST را تعریف می کند.
یک رشته با طول صفر که INADDR_ANY را تعریف می کند یا
یک عدد صحیح اختصاص داده شده به hostname که معرف یک سیستم در آن شبکه است.
port
هر سرویس دهنده به کلاینت هایی که یک یا چند پورت را صدا می زنند، گوش می دهد. پورت می تواند شماره ی پورت Fixnum باشد، یک رشته دربردارنده ی شماره ی پورت یا اسم سرویس باشد.

ماژول Socket

به منظور ایجاد یک Socket، لازم است تابع socket.socket() در ماژول socket را فراخوانی نمایید که سینتکس و دستور کلی آن به صورت زیر می باشد:

1
s = socket.socket (socket_family, socket_type, protocol=0)<button></button>

در زیر شرح هر یک از این پارامترها را مشاهده می کنید:

  • socket_family: این پارامتر، همان طور که در بالا توضیح داده شد، می تواند AF_UNIX یا AF_INET باشد.
  • socket_type: این پارامتر می تواند یا SOCK_STREAM و یا SOCK_DGRAM باشد.
  • protocol: این پارامتر اختیاری بوده و به صورت پیش فرض بر روی 0 تنظیم می شود.

پس از تعریف آبجکت socket، می توانید با استفاده از توابع لازم، برنامه های سمت سرویس دهنده و سمت سرویس گیرنده ی خود را تعریف نمایید. جداول زیر لیست توابع لازم برای این منظور را معرفی می کند:

Server Socket Methods (متدهای به مربوط به سمت سرویس دهنده ی از ماژول socket)

متد
شرح
s.bind()
این متد آدرس (hostname یا اسم سرویس دهنده، جفت آدرس پورت یاport number pair) را به socket به صورت دو طرفه وصل می کند.
s.listen()
این متد یک گوش فرادهنده (Listener) به TCP تنظیم و راه اندازی می کند. در واقع این متد به
s.accept()
این متد درخواست اتصال به سرویس دهنده را می پذیرد و به عبارتی ارتباط معلق را به سرور معرفی می کند.

متدهای ماژول socket مربوط به سمت سرویس گیرنده

متد
شرح
s.connect()
این متد اتصال به سرویس دهنده ی را بر اساس TCP راه اندازی می کند.

متدهای کلی ماژول socket

متد
شرح
s.recv()
این متد پیغام TCP را دریافت می کند.
s.send()
متد حاضر پیغام TCP را ارسال می کند.
s.recvfrom()
متد جاری پیغام UDP را دریافت می کند.
s.sendto()
این متد پیغام UDP را ارسال می کند.
s.close()
این متد socket را می بندد.
socket.gethostname()
اسم سرویس دهنده (hostname) را در خروجی برمی گرداند.

نوشتن فایل مربوط به بخش سرویس دهنده / پیاده سازی بخش مربوط به سرویس دهنده (writing server)

جهت پیاده سازی بخش مربوط به سمت سرور، تابع socket کپسوله سازی شده در ماژول socket را فراخوانی کرده و ابتدا یک آبجکت socket می سازیم. سپس به واسطه ی این آبجکت، دیگر توابع لازم را جهت تنظیم و راه اندازی سرویس دهنده ی socket صدا می زنیم.

حال متد bind(hostname, port) را جهت مشخص کردن یک port برای سرویس خود در دستگاه میزبان یا سرویس دهنده فراخوانی نمایید.

سپس، متد accept() را بر روی آبجکت s (آبجکت ساخته شده ی socket) جهت معرفی ارتباط معلق به ماشین سرور فراخوانی می کنید. این متد صبر می کند که سرویس گیرنده به port یا آدرس درگاه تعیین شده، متصل شود و متعاقبا آبجکت connection را که نشانگر اتصال آن سرویس گیرنده (کلاینت) است در خروجی برمی گرداند.

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/python           # This is server.py file
import socket               # Import socket module
s = socket.socket()         # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345                # Reserve a port for your service.
s.bind((host, port))        # Bind to the port
s.listen(5)                 # Now wait for client connection.
while True:
   c, addr = s.accept()     # Establish connection with client.
   print 'Got connection from', addr
   c.send('Thank you for connecting')
   c.close()                # Close the connection
<button></button>

پیاده سازی بخش مربوط به سرویس گیرنده / نوشتن فایل سرویس گیرنده (Client)

در این بخش از آموزش، یک اپلیکیشن ساده سمت سرویس گیرنده می نویسیم که اتصال به پورت معین 12345و دستگاه سرویس (سرویس دهنده) را فراهم می آورد.

به راحتی می توانید یک کلاینت یا سرویس گیرنده ی socket به واسطه ی تابع مربوطه از ماژول socket ایجاد کرد.

متد socket.connect(hosname, port ) یک اتصال بر اساس پروتکل TCP به hostname (دستگاه سرویس دهنده ی مربوطه بر اساس شماره ی port) باز می کند. این متد بر اساس اسن ماشین سرور و آدرس پورت اتصال را جهت تبادل داده برقرار می نماید.

پس از باز کردن socket، می توانید اطلاعات آن را مانند سایر آبجکت های IO بخوانید. لازم است در پایان، سوکت را بسته و اتصال را خاتمه می دهید.

کد زیر همان طور که مشاهده می کنید، بخش مربوط به سرویس گیرنده و در واقع یک کلاینت ساده است که به دستگاه سرویس دهنده و شماره درگاه مربوطه وصل شده، تمامی داده های مورد نیاز را از socket می خواند و در نهایت با فراخوانی تابع close() بر روی آبجکت s، سوکت را بسته و اتصال را خاتمه می دهد.

1
2
3
4
5
6
7
8
9
#!/usr/bin/python           # This is client.py file
import socket               # Import socket module
s = socket.socket()         # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12345                # Reserve a port for your service.
s.connect((host, port))
print s.recv(1024)
s.close                     # Close the socket when done
<button></button>

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

1
2
3
4
5
# Following would start a server in background.
$ python server.py &
# Once server is started run client as follows:
$ python client.py
<button></button>

خروجی زیر را برمی گرداند:

1
2
3
Got connection from ('127.0.0.1', 48437)
Thank you for connecting
<button></button>

ماژول های برنامه نویسی تحت شبکه برای Python / Python Internet modules

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

پروتکل
کاربرد و مورد استفاده
شماره ی درگاه یا پورت
ماژول پایتون
HTTP
Web pages (برای اپلیکیشن های تحت وب/پروتکل ارسال اطلاعات بین سرور، کلاینت)
80
httplib, urllib, xmlrpclib
NNTP
(پروتکل دسترسی به گروه های خبری)
119
nntplib
FTP
File transfers (انتقال فایل)
20
ftplib, urllib
SMTP
Sending email (ارسال ایمیل)
25
smtplib
POP3
Fetching email (واکشی ایمیل)
110
poplib
IMAP4
Fetching email (واکشی ایمیل)
143
imaplib
Telnet
Command lines (پنجره یا خط فرمان جهت اتصال به سرور راه دور)
23
telnetlib
Gopher
Document transfers ارسال فایل و سند
70
gopherlib, urllib
1396/02/18 10314 13408
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com

نظرات شما

برای ارسال سوال لازم است، ابتدا وارد سایت شوید.