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

آموزش سوکت نویسی با پایتون بررسی معیارهای مهم!

این تابع چهار ورودی می‌گیرد که هر چهارتای آن‌ها به صورت پیش‌فرض تعریف شده و نیازی به تعریف آن‌ها نخواهیم داشت. در پایان نیز کلاینت متصل را با استفاده از متد ()close می‌بندیم. سوالات مرتبط با مطالب را در بخش نظرات بنویسید و همکاران ما درصورتی‌که پاسخ آن‌ها را بدانند، حتما راهنمایی خواهند کرد. متد getOutputStream برای ارسال خروجی از طریق سوکت استفاده میشود . این مثال صفحه اصلی webcode.me را با استفاده از درخواست GET می‌ خواند.

این آدرس IP LoopBack نام دارد و در سیستم های كامپیوتری برای آزمایش و اشكالزدایی از آن استفاده می شود. در صورتی كه بسته ای را به این آدرس ارسال كنیم، این بسته تا سطح لایه فیزیكی پایین رفته و دوباره به ماشین برگردانده می شود. بدین ترتیب می توانیم ایرادات احتمالی در سیستم شبكه یك ماشین را كشف كنیم. در ابتدا به كلیه ماشین ها ( برگ ها ) اجازه ارسال اطلاعات داده می شود، اگر فقط یك ماشین داده ای برای ارسال داشته باشد كه اختلالی در روند ارسال روی نمی دهد و داده ها به صورت صحیح بر روی كانال ارسال می شوند. اما اگر اختلالی پیش بیاید به زیر درخت چپ فقط اجازه ارسال داده می شود و این روند به صورت بازگشتی ادامه می یابد تا دیگر ماشینی در شبكه نباشد كه در عملیات ارسال اختلالی ایجاد كند ( شكل 7-1 ) .

وظیفه اصلی لایه MAC كنترل دسترسی ماشین ها به لایه فیزیكی ( كانال ارتباطی ) است. فرستنده نیز با دریافت پاسخ گیرنده متوجه می شود كه باید بر روی كدام بسته برود و روند ارسال را از چه بسته ای ادامه دهد. استفاده از این تكنیك در مواردی كه فاصله بین فرستنده و گیرنده زیاد است، و همچنین خط دارای درصد خطای بالایی باشد مقرون به صرفه نیست. در ای روش فریم داده را به یك Generator تقسیم كرده و باقیمانده تقسیم را به فریم اضافه می كنند و همراه آن به سمت گیرنده ارسال می شود. در گیرنده نیز كل فریم ( همراه با باقیمانده ) را دوباره بر Generator تقسیم می كنند اگر خطایی روی نداده باشد باقیمانده صفر خواهد بود، در غیر این صورت خطایی در زمان ارسال روی داده است. این روش برای ارسال یك فایل مناسب است اما برای كارهای بلادرنگ ( Real Time ) مثل ارتباطات صوتی و تصویری ایجاد مشكل می كند.

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

در این حلقه یک فراخوانی به متد recv شی client_socket انجام می دهیم. این روش تعداد مشخص شده بایت را از کلاینت دریافت می کند - در مورد ما 1024. متد پذیرش رشته اجرا را تا زمانی که یک کلاینت متصل شود متوقف می کند. سپس یک جفت تاپلی (conn, address) را برمی‌گرداند، که در آن آدرس یک تاپلی از آدرس IP و پورت کلاینت است، و conn یک شی سوکت جدید است که یک اتصال را با کلاینت به اشتراک می‌گذارد و می‌تواند برای ارتباط با آن استفاده شود. اکنون، یا شما یا طرفی که می‌خواهید به آن متصل شوید به عنوان یک سرور و طرف دیگر به عنوان کلاینت عمل می‌کند. در حالی که یک سرور داده ها را به کلاینت ها ارائه می دهد، کلاینت ها به طور فعال به یک سرور متصل می شوند و داده ها را درخواست می کنند.

در مقایسه با کدها و برنامه نویسی سرور، نوشتن کدهای برنامه نویسی کلاینت بسیار ساده و روان است. برنامه فوق شی سوکت را با استفاده از تابع .connect() برای اتصال با سرور و فراخوانی s.sendall() برای ارسال پیام به آن، ایجاد می‌کند. در نهایت در کدهای فوق، تابع s.recv() برای خواندن پاسخ سرور و چاپ آن فراخوانی می‌شود. در ادامه این بخش از مقاله «سوکت نویسی با پایتون چیست» به بررسی روش پیاده‌سازی کدهای سوکت نویسی سرور و کلاینت پرداخته شده است. متد .select() در سوکت نویسی با پایتون این امکان را به شبکه می‌دهد تا تکمیل ورودی‌ها و خروجی‌ها را برای بیش از یک سوکت بررسی کند. بنابراین این متد پایتون را می‌توان فراخوانی کرد تا مشاهده شود که کدام سکوت دارای ورودی و خروجی آماده برای خواندن و نوشتن است.

سپس این عدد را می‌توان در بافر .outb برای دور انداختن بایت‌های ارسال شده استفاده کرد. در ادامه این بخش از مقاله «سوکت نویسی با پایتون چیست» به بررسی «کلاینت اتصال چندگانه» پرداخته می‌شود. اکنون پس از معرفی برخی از دوره‌های آموزش زبان برنامه نویسی پایتون، بخش بعدی مقاله «سوکت نویسی با پایتون چیست» به آموزش سوکت نویسی با پایتون اختصاص داده شده است. در لایه كاربرد برنامه های مختلفی می توانند اجرا شوند و هر كدام نیز بر اساس پروتكلی خاص فعالیت كنند. برنامه های لایه كاربرد در هر مرحله داده های خود را برای ارسال بر روی شبكه به لایه های پایین تر خود می دهند تا بعد از اعمال قواعد گفته شده در هر لایه به لایه فیزیكی برای ارسال بر روی خط تحویل داده شوند.

«تابع‌ها» و «متُدهای» (Method) اساسی سوکت API این ماژول در ادامه ارائه شده‌اند. در حالتی که برنامه پایتون در میانه پیاده‌سازی کدها باشد، «نخ‌های» (Thread) دیگر می‌توانند داده‌های سوکت جدید را مدیریت کنند. کتابخانه‌هایی مانند asyncio، نخ‌های چندگانه پیاده‌سازی می‌کنند، بنابراین برنامه‌های پایتون می‌توانند به صورت غیرهمزمان یا ناهمگام عمل کنند. در بخش بعدی مقاله «سوکت نویسی با پایتون چیست» به بررسی سوکت‌های «رابط برنامه نویسی کاربردی» (Application Programming Interface | API) پرداخته می‌شود. امروز مبحث شبکه‌ های کامپیوتری از اهمیت بسیار زیادی برخوردار است و داشتن دانش و مهارت در این حوزه، یکی از روش‌ های کسب موفقیت به‌ شمار می‌ آید. اگر شما نیز به ‌دنبال شغلی مطمئن با آینده تضمینی هستید، می‌ توانید روی مشاغل مرتبط با شبکه‌ های کامپیوتری یا برنامه‌ نویسی حساب باز کنید.

این دوره به نحوی تهیه و تدوین شده است که مباحث آن به ساده‌ترین شکل ممکن بیان شوند و مخاطبان دوره بتوانند به‌سادگی متوجه موضوعات مطرح شده شوند. به همین جهت برای شرکت در این دوره هیچ پیش‌نیاز به خصوصی وجود ندارد و افراد با هر سطحی از آگاهی و تحصیلات می‌توانند از مباحث این دوره نهایت استفاده را داشته باشند. درودبله کلاینت هم میتونه پیام بفرسته از طریق ساختار request و api. مثلا وقتی میخواید در یک سایت ثبت نام کنید اطلاعات خودتون رو وارد میکنید و دکمه ثبت رو میزنید. بعد از زدن دکمه اطلاعات تون از شما که کلاینت هستید به سرور ارسال میشه. درودبرای اینکار باید به برنامه نویسی مسلط باشید و سورس روبیکا رو هم خوب بشناسید.

در این روش از بیت توازن هم برای سطر ها یعنی ( فریم ها) و هم برای ستون ها استفاده می شود. اگر فاصله همینگ برابر 2d+1 باشد آنگاه تا d خطا را می توان در انها اصلاح كرد. تعداد اختلاف بین بیتهای متناظر در رشته همطول را فاصله همینگ گویند. زیر لایه خاصی از لایه پیوند داده ها، به نام زیر لایه كنترل دستیابی به رسانه ( MAC ) با این مسئله سرو كار دارد. برای مشاهده آموزش‌های مرتبط دیگر، در میانبیش از ۳۱,۰۰۰ ساعت آموزشمنتشر شده در فرادرس، جستجو کنید...

هنگامی که یک اتصال کلاینت ایجاد می‌شود، یک شی جدید سوکت ایجاد می‌کند که نشان دهنده اتصال است. همچنین یک تاپل را برمی‌گرداند که وظیفه نگهداری آدرس مشتری را به عهده دارد. این تاپل شامل (هاست، پورت) برای اتصال‌های پروتکل IPv4 یا (هاست، پورت، «جریان اطلاعات» (Flowinfo)، Scopeid) برای اتصال‌های پروتکل IPv6 است. در کل سوکت نویسی یا برنامه نویسی سوکت برای برقرار کردن ارتباط یک کلاینت با یک سرور مورد استفاده قرار میگیرد . برنامه نویسی سوکت در زبان جاوا زمانی کاربرد دارد که دو اپلیکیشن نوشته شده در دو JRE متفاوت بخواهند با همدیگر ارتباط برقرار کنند. اتصال دستگاه ها برای تبادل اطلاعات چیزی است که در شبکه انجام می شود.

در یك شبكه محلی این امكان وجود دارد كه هر ایستگاه تشخیص دهد سایر ایستگاه ها مشغول به چه كاری هستند. بنابراین بر طبق این مكانیزم در فرستنده ای كه قصد ارسال اطلاعات را دارد قبل از انجام عمل ارسال ابتدا به خط گوش می دهد اگر خط خالی باشد شروع به ارسال اطلاعات می كند. در این پروتكل فرستنده پس از ارسال یك فریم یك مدت زمانی را منتظر رسیدن پاسخ ( Ack ) از طرف گیرنده می شود. هر گاه زمان تایمر به صفر برسد و پاسخی برای بسته ارسالی دریافت نشود ، فرض می كند كه بسته یا خراب شده یا به مقصد نرسیده است. خطا معمولا ناشی از تبدیل یك مقدار در حین انتقال به یك مقدار دیگر است، مثلا تبدیل صفر به یك و یا بلعكس.

اضافه بر این شما می‌توانید سوکت IPv6 را با قرار دادن آرگومان AF_INET6 ایجاد کنید. یک سوکت، لینکی است میان دو اپلیکیشن که می‌توانند با همدیگر ارتباط برقرار کنند. این حالت می‌تواند به صورت محلی روی یک ماشین و یا به صورت ریموت بین دو ماشین جداگانه انجام شود. در این دوره، از نرم‌ افزارهای مختلفی مانند vscode ،python2 و python3 استفاده می‌ شود و از این‌ رو ‌به ‌طور کامل با محیط برنامه‌ نویسی پایتون آشنا خواهید شد. این موضوع برای فردی که در حوزه شبکه‌ های کامپیوتری فعالیت دارند یک مزیت خوب به‌ حساب می‌ آید. با استفاده از پروتكل TELNET می توانید به وسیله یك ماشین از راه دور دستورات خود را در ماشین مقصد اجرا كنید.

با «سوکت‌های جریانی» (Socket Stream)، داده‌ها در هر زمانی ارسال و دریافت می‌شوند. سوکت‌ها نقطه انتهایی کانال‌های ارتباطی دو طرفه به حساب می‌آیند. سوکت‌ها می‌توانند با برقراری ارتباط در یک فرآیند و ماشین یکسان، در پردازش‌های آن یا پردازش‌های فرآیندهای گوناگون ارتباط برقرار کنند. همچنین سوکت‌ها می‌توانند روی چندین کانال گوناگون از جمله «UDP»، «پروتکل کنترل ارتباط» یا «TCP» و سایر موارد پیاده‌سازی شوند. کتابخانه «Socket» در زبان پایتون کلاس‌های خاصی را برای مدیریت ارتباطات معمولی و همچنین یک واسط عمومی برای مدیریت بقیه ارتباطات فراهم می‌کند.

سپس، پس از برقراری اتصال، اتصال به IP و پورت طرف ارتباطی به همان روشی که برای یک سوکت شنود انجام می‌شود، اما بدون ایجاد سوکت جدید اتفاق می‌افتد. کتابخانه‌ های فراوان مرتبط با حوزه شبکه‌ های کامپیوتری موجود در پایتون، این امکان را برای شما فراهم می‌کنند تا با ایمپورت کردن آن‌ ها، بسیاری از دستورها را با صرف کم‌ ترین زمان اجرا کنید. زبان پایتون دارای محیطی گرافیکی بوده و به همین دلیل ایجاد ارتباط با آن نسبت به زبان‌ هایی مانند C راحت‌ تر است. این محیط کنسول و گرافیکی، تجربه کدنویسی سوکت آسانی به شما هدیه می‌ دهد. لایه شبكه در مدل OSI جای خود را به لایه اینترنت در مدل TCP/IP داده است. لایه اینترنت در مدل TCP/IP وظیفه مسیریابی بسته های TCP را به عهده دارد.

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

سپس به سراغ سوکت رفتیم، آن را با تلفن مقایسه کرده و انواع سوکت‌ها نظیر سوکت STREAM و سوکت Datagram را معرفی کردیم. در ادامه به برنامه نویسی سوکت در پایتون پرداختیم و با نوشتن یک برنامه‌ی ساده‌ طبق پروتکل TCP، نحوه‌ی برنامه نویسی سوکت با کتابخانه‌ی socket پایتون را برای شما توضیح دادیم. برنامه نویسی سوکت یکی از کاربردی‌ترین مباحث در شبکه است و در بازار کار تقاضای قابل توجهی برای آن وجود دارد. لذا پیشنهاد می‌کنیم به صورت جدی به یادگیری این مباحث بپردازید. کار با کتاب‌خانه‌های برنامه‌نویسی سوکت در پایتون یک نیاز ضروری برای مهندسین شبکه است.

امروزه، ما اغلب نیازی به کار مستقیم با سوکت‌ها نداریم، زیرا معمولاً توسط کتابخانه‌ها و فریم‌ورک‌های سطح بالاتر مدیریت می‌شوند، مگر اینکه واقعاً نیازی به حذف عملکرد برنامه یا مقیاس‌بندی آن وجود داشته باشد. با این حال، درک سوکت‌ها و داشتن اطلاعاتی در مورد نحوه عملکرد چیزها به عنوان یک توسعه‌دهنده یا دانشمند داده منجر به آگاهی کلی بهتری می‌شود و همیشه ایده خوبی است. سپس یک دستور if داریم که در صورت دریافت پیام \"close\" از حلقه ارتباطی خارج می شود. این بدان معنی است که به محض اینکه سرور ما یک رشته \"close\" در درخواست دریافت می کند، تاییدیه را برای کلاینت ارسال می کند و ارتباط خود را با آن قطع می کند. اگر مقداری بزرگتر از 0 را مشخص کنید، مثلاً 1، به سیستم عامل می گوید که چه تعداد کلاینت را می توان قبل از فراخوانی متد پذیرش در صف قرار داد. این تابع آرگومانی به نام backlog را می پذیرد که حداکثر تعداد اتصالات پذیرفته نشده در صف را مشخص می کند.

برنامه نویسی سوکت روشی برای اتصال دو «گره» (Node | دستگاه فیزیکی) در شبکه جهت داشتن ارتباط با یکدیگر است. نود در شبکه‌های کامپیوتری به دستگاه‌هایی گفته می‌شود که امکان اتصال به یکدیگر و تبادل اطلاعات را دارند. از زبان‌های برنامه نویسی مختلفی می‌توان برای برنامه نویسی سوکت یا همان سوکت نویسی استفاده کرد. به دلیل سادگی یادگیری پایتون، سینتکس ساده آن و انواع کتابخانه‌های مختلف، بسیاری تمایل دارند از پایتون در برنامه نویسی سوکت استفاده کنند. بنابراین در این مقاله، از پایه به سوال سوکت نویسی با پایتون چیست ، پاسخ داده شده است.

«کلاینت» (Client) و «سرور» (Server) می‌توانند با «نوشتن» write() و «خواندن» read() کدها در سوکت‌هایشان با یکدیگر ارتباط برقرار کنند. استفاده از زبان برنامه نویسی پایتون یکی از ساده‌ترین شیوه‌های شروع ایجاد رابط یا «اینترفیس» (Interface) سوکت‌ها به شمار می‌رود. همچنین زبان پایتون دارای کتابخانه‌هایی است که دسترسی سطح بالاتری را به پروتکل‌های شبکه از جمله FTP و HTTP در سطح برنامه‌های خاص خواهد داد. در بخش بعدی مقاله «برنامه نویسی سوکت با پایتون چیست» به بررسی چیستی سوکت پرداخته شده است. امروزه برنامه نویسی تقریباً در همه بخش‌های علوم کامپیوتر مورد استفاده قرار می‌گیرد. یکی از این مباحث، برنامه نویسی سوکت یا همان سوکت نویسی (Socket Programming) به حساب می‌آید.

اگر در هدر IPv4 دقت كنید، می بینید كه در این هدر حداكثر 32 بیت برای آدرس دهی IP در نظر گرفته شده است. همانطور كه می دانید با این مقدار بیت تنها می توان دو به توان 32 ماشین در شبكه را آدرس دهی كرد. امروزه به دلیل گسترش بیش از حد شبكه جهانی اینترنت دیگر این مقدار ماشین جوابگوی نیاز روز افزون جهان نمی باشد به همین دلیل ویرایش جدیدتری از پروتكل IP‌ مطرح شده است. اگر چه تا كنون به صورت عمومی و تجاری از پروتكل IPv6 استفاده نشده است، ولی در آینده نزدیك باید شاهد رشد و همه گیر شدن ویرایش جدید پروتكل IP باشیم. برای ارسال یك E.Mail در اولین گام شما باید به ماشینی در شبكه كه این سرویس بر روی آن فعال است متصل شوید. برای این منظور می توانید از ماشین های سرویس دهنده پست الكترونیكی معرف دنیا استفاده نمایید.

سوکت دیتاگرام نوعی شبکه به حساب می‌آید که به صورت بدون اتصال، بسته‌ها را ارسال و دریافت می‌کند. برای مثال می‌توان گفت که عملکرد آن شبیه به «صندق ایمیل» (Mailbox) است. در صندق ایمیل داده‌ها یا همان حروف به یک صندق یا جعبه ارسال و جمع‌آوری می‌شوند و سپس آن‌ها را به سوکت گیرنده می‌فرستند. در این نوع از سوکت‌ها ارتباط‌ها در پروتکل UDP انجام شده و نوع آن با «SOCK_DGRAM» نشان داده می‌شود. در بخش بعدی به معرفی «سوکت جریان» (Stream Socket) پرداخته شده است. در این بخش به آموزش «برنامه نویسی سمت سرور» (Server-Side Programming) با پایتون پرداخته می‌شود.

فقط در فرآیندهای افراد «Superuser» از سوکت‌های خام استفاده می‌شود و معمولاً برای کاربران معمولی کاربردی ندارند. Num_conns از خط فرمان خوانده می‌شود و تعداد اتصال‌ها برای ایجاد سرور را نشان می‌دهد. در کدهای فوق نیز کاملاً مانند کدهای بخش سرور، هر سوکت روی حالت غیر مسدود تنظیم شده است. از .connect_ex() به جای .connect() استفاده می‌شود؛ زیرا .connect() در کدهای فوق بلافاصله یک استثنا «BlockingIOError» ایجاد می‌کند. متد .connect_ex() در ابتدا به جای اینکه استثنایی ایجاد کند که در اتصال در حال انجام اختلال ایجاد کند، یک «نشانگر» (Indicator) خطا به نام «errno.EINPROGRESS» را برمی‌گرداند.


برنامه نویسی خوبه یا نه