آموزش برنامه نویسی Socket در زبان Python : در این نوشته و همچنین بخش های بعدی این نوشته میخواهیم برنامه نویسی Socket به زبان برنامه نویسی Python را تجربه کنیم!
Socket Programming یا برنامه نویسی تحت شبکه، به هر نوع برنامه ای که نیاز به ارتباط با شبکه ای دیگر بوسیله ساخت سوکت خارج از یک کامپیوتر داشته باشد، گویند.
معمولا در این نوع برنامه نویسی از هر دو سمت Client و Server برای جا به جایی داده ها بهره گرفته میشود.
پس از یادگیری اصول پایه برنامه نویسی در هر زبانی، به مرحله ای میرسید که نیاز به گام گذاشتن در بیرون از گستره سیستم عامل و یک دستگاه تکی دارید.
برنامه نویسی تحت شبکه امروزه بسیار کاربرد دارد و به خاطر گستردگی و امکاناتی که دراختیار میگذارد، در بسیاری از برنامه ها کاربرد دارد.
زبان برنامه نویسی Python پتانسیل و جنبش بسیار خوبی برای برنامه نویسی تحت شبکه یا Socket Programming دارد.
به همین جهت این زبان را برای آغاز برای آغاز برنامه نویسی تحت شبکه گزینش کردیم.
برای برنامه نویسی شبکه در زبان پایتون، نیاز است تا به تمام Syntax ها و مفهوم های ابتدایی این زبان آشنا باشید.
اگر آشنایی با این زبان ندارید، پیشنهاد میکنیم، نخست از برگه ” آموزش برنامه نویسی پایتون” با این زبان آشنا شوید و سپس این آموزش را دنبال کنید.
برای ارتباط با یک شبکه نخست از هر چیزی باید یک “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 میسازد.
در برنامه نویسی تحت شبکه بطور کلی یک برنامه سرور و یک برنامه کلاینت خواهیم داشت.
برنامه سرور همانطور که از نام آن پیداست، باید خدماتی را به کلاینت (کاربر) ارائه کند، بنابراین ساز و کار فایل سروری ایین خواهد بود که یک راه ارتباطی بسازد و بر روی آن راه ارتباطی گوش به زنگ برای ارائه سرویس باشد.
در کد فایل برنامه سرور در این باره بیشتر توضیح میدهیم
هم اکنون میخواهیم یک فایل سرور بسازیم و به آن وصل شویم.
#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()
Bind کردن در واژه به معنی گرفتار کردن است، دقیقا کاری که میخواهیم انجام شود! در واقع داریم یک راه ارتباطی بر روی یک آی پی (در اینجا یک رشته خالی گذاشته ایم تا آی پی محلی 127.0.0.1 در نظر گرفته شود) و یک پورت ویژه میسازیم و میخواهیم این راه را رزور کرده باشیم.
نکته: متغیر c یک سوکت(درخواست) پذیرفته شده است که میتوانید از این پس با آن کار کنید.
نکته: متغیر addr در این خط آی پی آدرس شخص کلاینت (کاربر) متصل شده را نگه میدارد.
نکته: تا زمانی که اتصالی پذیرفته (accept) نشود، کد های بعدی اجرا نمیشوند.
نکته: در این کد و از شیء c به جای شیء s استفاده شده است چرا که شیء c سوکت پذیرفته شده است نه s !
نکته: در دستور چاپ پیام پیش از باز شدن دابل کوتیشن از حرف b برای تبدیل رشته به برابر باینری آن استفاده شده است، بدون اینکار کامپایلر خطا میدهد.
در نوشته آینده به توضیح کامل تر متد های سوکت و همچنین شیوه ساخت یک فایل نمونه کلاینت میپردازیم.
سید محمد حسینی
مهر ۲۴, ۱۳۹۷ در ۲:۴۳ ب.ظ
سلام
اگر ارتباط بین ۲ تا دیوایس از طریق کابل تبدیلusb به otg باشه دستورات تعریف سوکت به چه صورت خواهد بود؟
Pezhman
شهریور ۹, ۱۳۹۷ در ۹:۵۵ ب.ظ
عالی بود ممنون.
توضیح دادنتون حرف نداره.
منتظر توضیحات بیشتر و کارایی بیشتر سوکت نویسی هستیم.
مهران
فروردین ۸, ۱۳۹۷ در ۱۱:۰۸ ب.ظ
اگر بخام چند تا کلاینت رو به سرور وصل کنم باید چکار کنم؟
آرتین
فروردین ۹, ۱۳۹۷ در ۷:۱۲ ب.ظ
درود، کافیه از فایل کلاینت نمونه چند تا ایجاد کنید.
آرین
آبان ۲۳, ۱۳۹۶ در ۷:۱۶ ب.ظ
وقتی برنامه رو اجرا می کنم این ارور رو نشون می ده:
Traceback (most recent call last):
File “C:/Users/arian/Desktop/online”, line 8, in
s.listen()
File “”, line 1, in listen
TypeError: listen() takes exactly one argument (0 given)
آرتین
آبان ۲۳, ۱۳۹۶ در ۱۱:۰۳ ب.ظ
s.listenدر کدتون () رو به s.listen(5) تغییر بدید
علی
شهریور ۱۰, ۱۳۹۶ در ۹:۴۹ ق.ظ
سلام لطفا این بخش رو ادامه بدین این آموزشا واقعا برای کسانی که برنامه نویسی تحت شبکه میخوان انجام بدن لازمه .
آرتین
آبان ۱۹, ۱۳۹۶ در ۱۱:۲۳ ب.ظ
درود، بخش تازه این آموزش افزوده شد.
a human
اردیبهشت ۲۴, ۱۳۹۶ در ۱۲:۳۶ ب.ظ
ممنون. واقعا لذت بردم مفید بود
Amir
اسفند ۱۵, ۱۳۹۵ در ۱۰:۱۶ ب.ظ
سلام
من دو تا کامپیوتر دارم که یکیو گذاشتم تا به پورت گوش کنه(سرور) و اون یکیرو کلاینت گذاشتم
ولی وقتی میخام به سرور وصل شم خطال ۱۰۰۶۱ میده
ConnectionRefusedError: [WinError 10061] No connection could be made because the target machine actively refused it
فایروال خاموشه
پرت بازه (حتی تو فایروال)
ای پی هم وجود داره
انتی ویروس هم ندارم
—————————–
شرایط بالا برای هر دو تا کامپیوتره
لطفا راهنماییم کنید
آرتین
اسفند ۱۵, ۱۳۹۵ در ۱۰:۵۳ ب.ظ
درود، ارتباط این دو کامپیوتر به چه شکل هست؟ از آی پی سرور در کلاینت پینگ بگیرید ؟ اگر میشه کد رو هم بفرستید.
دیدگاه خود را در میان بگذارید