20 درصد تخفیف ویژه دوره های جامع آکادمی تکوان24!

فقط 0 روز و 0 ساعت و 0 دقیقه و 0 ثانیه باقی مانده!

آموزش سوکت نویسی با پایتون

زمان مطالعه: 5 دقیقه

آنچه در این مقاله می‌خوانید

در این مقاله قصد دارم تا شما را با سوکت نویسی با پایتون آشنا کنم سوکت نویسی با پایتون یکی از مهمترین مباحث برنامه نویسی می باشد که با استفاده از آن می توانید برنامه های تحت شبکه بنویسید به عبارت دیگر می توانید برنامه کلاینت و سروری بنویسید شما با یادگیری سوکت نویسی با پایتون می توانید برنامه های تحت شبکه مانند ساخت اسکنرها و کیلاگرها و تروجان ها را بنویسید برای سوکت نویسی با پایتون دانش TCP/IP و زبان برنامه نویسی پایتون مورد نیاز می باشد.

سوکت نویسی با پایتون | سوکت چیست ؟

سوکت ها endpoint های یک کانال ارتباطی دو طرفه هستند. ارتباطات سوکت می‌تواند روی یک ماشین یا روی ماشین های مجزا برقرار شود ، یک سوکت یک endpoint در جریان ارتباط بین دو برنامه در حال اجرا بر روی یک شبکه کامپیوتری مانند اینترنت است.  که یک مفهوم کاملا مجازی است و به معنای سخت افزار نیست. سوکت شبکه را می توان با ترکیبی منحصر به فرد از آدرس IP و شماره پورت شناسایی کرد. سوکت های شبکه ممکن است بر روی تعدادی از انواع کانال های مختلف مانند TCP، UDP و غیره پیاده سازی شوند.

اصطلاحات مختلف مربوط به سوکت مورد استفاده در برنامه نویسی شبکه به شرح زیر است:

  • Domain:

Domain خانواده‌ای از پروتکل هایی است که به عنوان مکانیزم انتقال استفاده می شود. این ها مقادیر ثابتی  مانند AF_INET، PF_INET، PF_UNIX، PF_X25 و غیره هستند.

  • Type:

 به معنای نوع ارتباط بین دو endpoint است، معمولاً SOCK_STREAM برای پروتکل های اتصال گرا (TCP) و SOCK_DGRAM برای پروتکل های بدون اتصال(UDP).

  • Protocol:

 برای شناسایی یک نوع پروتکل در یک Domain و Type استفاده می‌شود. مقدار پیش فرض آن ۰ است.

  • Hostname:

 بعنوان شناسه یک اینترفیس شبکه عمل می کند. نام هاست ممکن است یک رشته، یک آدرس IPv4، یا یک آدرس IPv6  باشد.

  • Port:

هر سرور به کلاینت ها که با یک یا چند پورت متصل است گوش می‌دهد.

معرفی ماژول سوکت:

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

import socket

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

socket_family:

همانطور که قبلا توضیح داده شد،  یا AF_UNIX یا AF_INET است.

AF_INET:

socket_family برای آدرس های IPv4.

AF_INET6:

socket_family برای آدرس های IPv6.

socket_type:

یا SOCK_STREAM یا SOCK_DGRAM است.

SOCK_STREAM:

لایه ۴ آن TCP است.

SOCK_DGRAM:

لایه ۴ آن  UDP است.

متد های سوکت:

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

  • Server Socket Methods
  • Client Socket Methods
  • General Socket Methods

Server Socket Methods:

در معماری  client-server  ، یک سرور متمرکز وجود دارد که سرویس ارائه می دهد و بسیاری از کلاینت ها سرویس را از آن سرور متمرکز دریافت می کنند. کلاینت نیز درخواست را به سرور ارسال می‌کند. چند متد مهم سوکت سرور در این معماری به شرح زیر است:

  • ()bind:

این متد  (Hostname، Port Number) را به سوکت متصل می کند.

  • ()listen:

این روش اساساً به اتصالات ایجاد شده به سوکت گوش می دهد. شنونده TCP را راه اندازی می کند. Backlog آرگومان این متد است که حداکثر تعداد اتصالات در صف را مشخص می کند. حداقل مقدار آن ۰ و حداکثر مقدار آن ۵ است.

  • ()accept:

این متد اتصال کلاینت TCP را می پذیرد. جفت (conn، addr) جفت مقدار برگشتی این روش است. در اینجا، conn یک شی سوکت جدید است که برای ارسال و دریافت داده‌ها در اتصال استفاده می‌شود و addr، آدرسی است که به سوکت متصل شده است. قبل از استفاده از این متد، باید از متد ()socket.bind و ()socket.listen استفاده شود.

Client Socket Methods:

کلاینت در معماری client-server از سرور درخواست می کند و سرویس را از سرور دریافت می کند. برای این متد، تنها یک روش برای کلاینت اختصاص داده شده است:

  • connect(address):

این متد کلاینت را به سرور متصل می کند. address  آرگومان نشان دهنده آدرس سرور است.

General Socket Methods:

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

  • recv(bufsize):

این متد message TCP را از سوکت دریافت می کند. آرگومان bufsize مخفف اندازه بافر است و حداکثر داده ای را که این روش می تواند در هر زمان دریافت کند را تعریف می کند.

  • send(bytes):

این متد برای ارسال داده ها به سوکتی که به ریموت ماشین متصل است استفاده می شود. آرگومان bytes  تعداد بایت های ارسال شده به سوکت را نشان می دهد.

  • recvfrom(data, address):

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

  • sendto(data, address):

این متد برای ارسال داده ها از سوکت استفاده می شود. دو مقدار جفت (data,address) با این روش برگردانده می شود. data تعداد بایت های ارسال شده را مشخص می کند و address نشانی ریموت ماشین را مشخص می کند.

  • ()close:

این متد برای بستن سوکت استفاده می‌شود.

  • ()gethostname:

این متد نام هاست را برمی گرداند.

  • sendall(data):

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

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

کد سمت سرور:

در این برنامه سوکت سمت سرور، از متد ()socket.bind استفاده می کنیم که آن را به یک آدرس IP و پورت خاص متصل می کند تا بتواند به درخواست های دریافتی روی آن IP و پورت گوش دهد. بعد از متد ()socket.listen استفاده می کنیم که سرور را در حالت listen قرار می دهد. مثلاً ۴، به‌عنوان آرگومان متد ()socket.listen به این معنی است که اگر سرور مشغول باشد، تا ۴ اتصال منتظر می‌مانند و اگر سوکت پنجم سعی کند وصل شود، اتصال رد می‌شود. با استفاده از متد ()socket.send پیامی برای کلاینت ارسال می کنیم. در انتها از متد ()socket.accept و ()socket.close برای شروع و بستن اتصال به ترتیب استفاده می کنیم.

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

سوکت نویسی با پایتونکد سمت کلاینت:

در برنامه سوکت سمت کلاینت باید یک شی سوکت بسازیم. سپس ما به پورتی که سرور ما روی آن در حال اجرا است  در مثال ما ۱۲۳۴۵ متصل می‌شویم. پس از آن با استفاده از متد ()socket.connect یک اتصال برقرار می کنیم. سپس با استفاده از متد ()socket.recv، کلاینت پیام را از سرور دریافت می کند. در نهایت، متد ()socket.close کلاینت را می بندد.

Socket_TCP_Client

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

socket is listening

بعد از اجرای برنامه در کنسول سمت کلاینت رشته زیر سمت کلاینت وتصویر بعدی سمت سرور  نمایش داده می‌شود:

Connecting Established

مدیریت استثناعات در سوکت:

به کد زیر توجه کنید:

Socket_timeout

در اسکریپت بالا ابتدا یک سوکت ساختیم. به دنبال آن آدرس IP میزبان و شماره پورتی که سرور ما روی آن در حال اجرا است ارائه شد – در مثال ما ۵۴۳۲۱. بعد از  try استفاده شده و در داخل آن با استفاده از متد ()socket.bind سعی کردیم آدرس IP و پورت را متصل کنیم. ما از متد ()socket.settimeout برای تنظیم زمان انتظار برای کلاینت استفاده می‌کنیم، و  3 ثانیه را تنظیم می کنیم. بلاک except استفاده می شود که در صورت عدم برقراری ارتباط بین سرور و مشتری، پیامی را چاپ می کند.

در صورتی که علاقمند به یادگیری پایتون هستید می توانید دوره جامع پایتون را از قسمت دوره های آکادمی تکوان ۲۴ تهیه کنید.

منابع انگلیسی برای یادگیری سوکت نویسی با پایتون

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.

20 درصد تخفیف ویژه دوره های جامع آکادمی تکوان24!

فقط 0 روز و 0 ساعت و 0 دقیقه و 0 ثانیه باقی مانده!