با آموزش حضوری و آنلاین مقدماتی تا پیشرفته پایتون , محبوبترین زبان برنامهنویسی دنیا در محیطی عملی کاربردی و پروژه محور وارد دنیای برنامه نویسی شوید
مشاهده بیشتراگه پایتون بلدی و میخوای وارد دنیای هوش مصنوعی بشی، این دوره مخصوص توئه! با آموزش پروژهمحور و همراهی اساتید حرفهای، یاد بگیر چطور از هوش مصنوعی تو زمینههایی مثل پزشکی، بورس و املاک استفاده کنی.
مشاهده بیشتراگه یادگیری ماشین بلدی و آمادهای وارد چالشهای حرفهای بشی، دوره یادگیری عمیق پروژهمحور برای توئه! طراحی شبکههای عصبی و کار روی پروژههای واقعی مثل تشخیص تصویر و پردازش زبان رو اینجا یاد میگیری.
مشاهده بیشتربا این دوره، 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 که دیگر انواع عملیات انتقال و غیره را تحت پوشش قرار می دهد، مدیریت می نماید.
برای درک مفهوم سوکت و کار با آن، لازم است با واژگان زیر آشنا شوید:
یک رشته که می تواند اسم سرویس دهنده (hostname)، آدرس IP نسخه ی 4، آدرس IPV6 (آدرس IP ورژن 6) با ساختار نگارشی دو نقطه باشد. یک رشته "
" که آدرس INADDR_BROADCAST را تعریف می کند.
یک رشته با طول صفر که INADDR_ANY را تعریف می کند یا
یک عدد صحیح اختصاص داده شده به hostname که معرف یک سیستم در آن شبکه است.
ماژول 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)
متدهای ماژول socket مربوط به سمت سرویس گیرنده
متدهای کلی ماژول socket
نوشتن فایل مربوط به بخش سرویس دهنده / پیاده سازی بخش مربوط به سرویس دهنده (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
در زیر لیستی از ماژول های مهم و پرکاربرد پایتون در زمینه ی برنامه نویسی تحت شبکه را مشاهده می کنید.
نظرات شما