آموزش برنامه نویسی Socket در زبان Python – بخش۱

  • جمعه ۱۴ آبان, ۱۳۹۵
  • +35
  • ۷۲۳ بازدید

آموزش برنامه نویسی Socket در زبان Python : در این نوشته و همچنین بخش های بعدی این نوشته می‌خواهیم برنامه نویسی Socket به زبان برنامه نویسی Python را تجربه کنیم!

Socket Programming یا برنامه نویسی تحت شبکه، به هر نوع برنامه ای که نیاز به ارتباط با شبکه ای دیگر بوسیله ساخت سوکت خارج از یک کامپیوتر داشته باشد، گویند.

معمولا در این نوع برنامه نویسی از هر دو سمت Client و Server برای جا به جایی داده ها بهره گرفته می‌شود.

برنامه نویسی تحت شبکه با پایتون

پس از یادگیری اصول پایه برنامه نویسی در هر زبانی، به مرحله ای می‌رسید که نیاز به گام گذاشتن در بیرون از گستره سیستم عامل و یک دستگاه تکی دارید.

برنامه نویسی تحت شبکه امروزه بسیار کاربرد دارد و به خاطر گستردگی و امکاناتی که دراختیار می‌گذارد، در بسیاری از برنامه ها کاربرد دارد.

زبان برنامه نویسی Python پتانسیل و جنبش بسیار خوبی برای برنامه نویسی تحت شبکه یا Socket Programming دارد.

به همین جهت این زبان را برای آغاز برای آغاز برنامه نویسی تحت شبکه گزینش کردیم.

پیش نیاز های برنامه نویسی Socket در زبان Python

برای برنامه نویسی شبکه در زبان پایتون، نیاز است تا به تمام Syntax ها و مفهوم های ابتدایی این زبان آشنا باشید.

اگر آشنایی با این زبان ندارید، پیشنهاد می‌کنیم، نخست از برگه ” آموزش برنامه نویسی پایتون” با این زبان آشنا شوید و سپس این آموزش را دنبال کنید.

آموزش برنامه نویسی Socket در زبان Python

برای ارتباط با یک شبکه نخست از هر چیزی باید یک “Socket” بسازیم.

برای اینکه یک فایل تازه در IDLE پایتون بسازید و نخست از هر چیزی با با دستور import کتابخانه سوکت را درون ریزی کنید.

import socket

پس از آن با دستور

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

یک شی (آبجکت) از Socket بسازید.

کد شما تا به اینجای کار باید به شکل زیر باشد

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

تا به اینجا ما کتابخانه کار با socket ها را درون ریزی کردیم و یک سوکت با دو پارامتر ساختیم.

نخستین پارامتر یعنی AF_INET به گروه آدرس دهی ipv4 اشاره دارد؛ آدرس دهی ipv6 متفاوت است که در این نوشته به آن نمی‌پردازیم.

دومین پارامتر یعنی SOCK_STREAM به این معنی است که ما با پروتکل TCP کار می‌کنیم.

نکته : برای ساخت اتصال بصورت Low-Level و به شیوه کانکشنی می‌توانید ساخت یک سوکت را به شکل زیر انجام دهید.

s=socket.socket()

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

توضیح درباره سرور و کلاینت در برنامه نویسی سوکت

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

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

در کد فایل برنامه سرور در این باره بیشتر توضیح می‌دهیم

آموزش برنامه نویسی Socket در زبان Python

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

#import socket library
import socket
s=socket.socket()
#reserve a port in Computer
port=1440
#binidng
s.bind(('',port))
s.listen()
while True:
   # Establish connection with client.
   c, addr = s.accept()     
   print("Got connection from", addr)
   # send a thank you message to the client. 
   c.send(b'Thank you for connecting')
   # Close the connection with the client
   c.close()
    

  • خط۲: کتابخانه مربوط به کار با سوکت فراخوانی شده است.
  • خط۳: یک شیء سوکت در متغیر s ساخته شده است.
  • خط۵: به متغیر port مقدار ۱۴۴۰ را داده ایم؛ این متغیر قرار است در ادامه به عنوان شماره پورت رزرو شده برای ساخت سوکت بکارگرفته شود.
  • خط۷: در این خط سوکت s را بایند می‌کنیم.

Bind کردن در واژه به معنی گرفتار کردن است، دقیقا کاری که می‌خواهیم انجام شود! در واقع داریم یک راه ارتباطی بر روی یک آی پی (در اینجا یک رشته خالی گذاشته ایم تا آی پی محلی ۱۲۷٫۰٫۰٫۱ در نظر گرفته شود) و یک پورت ویژه می‌سازیم و می‌خواهیم این راه را رزور کرده باشیم.

  • خط۸: در این خط سوکت s را به گوش می‌کنیم (listen) تا منتشر درخواست از جانب کاربر بر روی سوکت (راه ارتباطی) ساخته شده باشد.
  • خط۹: یک حلقه بی نهایت (همیشه درست) برای دریافت همیشگی درخواست ها نوشته ایم.
  • خط۱۱: در اینجا سوکت s را در حالت accept (پذیرش درخواست) قرار داده ایم و مقدار بازگشتی از این متد را به متغیر c و addr نسبت داده ایم.

نکته: متغیر c یک سوکت(درخواست) پذیرفته شده است که می‌توانید از این پس با آن کار کنید.

نکته: متغیر addr در این خط آی پی آدرس شخص کلاینت (کاربر) متصل شده را نگه می‌دارد.

  • خط۱۲: در این خط درصورتی که کد خط ۱۱ با پیروزی انجام شود، یک پیام نمایش داده می‌شود که در آن آی پی آدرس کلاینت متصل شده در برنامه سرور نمایش داده می‌شود.

نکته: تا زمانی که اتصالی پذیرفته (accept) نشود، کد های بعدی اجرا نمی‌شوند.

  • خط۱۴: در این خط با استفاده از متد send از سمت فایل و برنامه سرور به کاربر متصل شده پیامی فرستاده می‌شود.

نکته: در این کد و از شیء c به جای شیء s استفاده شده است چرا که شیء c سوکت پذیرفته شده است نه s !

نکته: در دستور چاپ پیام پیش از باز شدن دابل کوتیشن از حرف b برای تبدیل رشته به برابر باینری آن استفاده شده است، بدون اینکار کامپایلر خطا می‌دهد.

  • خط۱۶: سوکت پذیرفته شده c با متد close() بسته می‌شود.

در نوشته آینده به توضیح کامل تر متد های سوکت و همچنین شیوه ساخت یک فایل نمونه کلاینت می‌پردازیم.

برای دریافت تازه‌ترین ها به کانال تلگرامی کدفنجونی بپیوندید : cupcode_ir@

Amir

اسفند ۱۵, ۱۳۹۵ در ۱۰:۱۶ ب.ظ

پاسخ

سلام
من دو تا کامپیوتر دارم که یکیو گذاشتم تا به پورت گوش کنه(سرور) و اون یکیرو کلاینت گذاشتم
ولی وقتی میخام به سرور وصل شم خطال ۱۰۰۶۱ میده
ConnectionRefusedError: [WinError 10061] No connection could be made because the target machine actively refused it
فایروال خاموشه
پرت بازه (حتی تو فایروال)
ای پی هم وجود داره
انتی ویروس هم ندارم
—————————–
شرایط بالا برای هر دو تا کامپیوتره
لطفا راهنماییم کنید

آرتین

اسفند ۱۵, ۱۳۹۵ در ۱۰:۵۳ ب.ظ

پاسخ

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

a human

اردیبهشت ۲۴, ۱۳۹۶ در ۱۲:۳۶ ب.ظ

پاسخ

ممنون. واقعا لذت بردم مفید بود

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

@

شما ربات هستید؟ *