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

آموزش سوکت نویسی با پایتون بهمراه پروژه برنامه نویسی سوکت دانشجویار

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

هنگامی‌که یک شی سوکت اولیه داریم، می‌توانیم از روش‌هایی برای باز کردن یک اتصال، ارسال داده، دریافت داده و درنهایت بستن اتصال استفاده کنیم. به دلیل اینکه سوکت شنود برای رویداد selectors.EVENT_READ ثبت شده است، باید برای خواندن آماده باشد. Sock.accept() و سپس conn.setblocking(False) برای قرار دادن سوکت در حالت غیر مسدود فراخوانی می‌شود. اگر سرور مسدود شود کل سرور تا زمانی متوقف خواهد شد که مسدودسازی غیرفعال شود. این موضوع به این معنی است که در این حالت سایر سوکت‌ها در انتظار باقی می‌مانند، حتی اگر سرور به طور فعال کار نکند.

برای كم كردن Delay و همچنین افزایش Through Put در یك شبكه مكانیزم هایی پیشنهاد شده است كه در اینجا نمونه هایی از آنها را بررسی می كنیم. اگر Parity زوج داشته باشیم مقدار این بیت طوری انتخاب خواهد شد كه همراه كل مجموعه بیت ها، تعداد بیت های یك زوج باشد. و اگر Parity فرد داشته باشیم طوری بیت های یك را انتخاب می كنیم كه تعدا آنها فرد باشد. این روش بسیار مناسب می باشد و توسط لایه فیزیكی نیز به راحتی قابل اجراست. ضعف این روش این است كه اگر بایت اول آسیب ببیند تا انتهای عمل ارسال تمام اطلاعات به درستی در یافت نمی شوند. در دو كامپیوتر كه بوسیله شبكه به هم متصل می شوند هر لایه با لایه هم سطح خود توافقی برای انجام عملیات دارد به این توافق بین لایه ها پروتكل گویند.

زمانی که در این کدها از متد sel.select() استفاده می‌شود، همان‌طور که در ادامه نشان داده شده است، می‌توان منتظر رویدادها در یک یا چند سوکت بود و سپس داده‌ها را هنگامی خواند و نوشت که آماده هستند. متد sel.register() سوکت‌ها را برای نظارت با متد sel.select() جهت رویدادهای مورد نظر ثبت می‌کند. بخش بعدی از مقاله «سوکت نویسی با پایتون چیست» به مدیریت اتصال‌های چندگانه اختصاص داده می‌شود. متدaccept()اجرا را «مسدود» (Block) می‌کند و در انتظار یک اتصال ورودی می‌ماند. هنگامی که یک اتصال کلاینت ایجاد می‌شود، یک شی جدید سوکت ایجاد می‌کند که نشان دهنده اتصال است. همچنین یک تاپل را برمی‌گرداند که وظیفه نگهداری آدرس مشتری را به عهده دارد.

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

برای اینكه انواع مختلف كامپیوترها بتوانند با یكدیگر ارتباط برقرار كنند، باید ساختمان داده ها را به صورت انتزاعی تعریف كرد و سپس به صورت كد درآورد تا بتوانند از خطوط عبور كنند. وظیفه لایه نمایش این است كه این ساختمان داده های انتزاعی را مدیریت كند. برای برقراری ارتباط بین فرستنده و گیرنده در پروتكل TCP از شیوه دست تكانی ( Hand Shacking ) سه مرحله ای استفاده می شود. به بیان دیگر، برنامه ای در ماشین منبع به كمك هدر پیام و پیام های كنترلی، با برنامه مشابه در ماشین مقصد ارتباط برقرا ر می كند. وقتی كه تعداد بسته ها در یك قسمت از شبكه زیاد شود، كارایی آن نقطه از شبكه كاهش می یابد و اصطلاحا گفته می شود ازدحام بوجود آمده است. در این حالت دیگر مسیریاب قادر به مسیریابی بسته ها در شبكه نمی باشد.

بعد از اتصال به ماشین برای پذیرفته شدن در سرویس SMTP شما باید از دستور HELO استفاده كنید. لایه كاربرد شامل پروتكل های مختلفی است كه توسط كاربران مورد استفاده قرار می گیرد. نمونه ای از این پروتكل ها ، پروتكل HTTP‌ است كه قراردادی برای انتقال اسناد HTML می باشد و اینترنت بر مبنای آن پایه ریزی شده است. پروتكل های بدون اتصال در روند ارسال و دریافت نامطمئن هستند ولی در عوض به خاطر حجم كم عملیات بسیار سریعتر از پروتكل های TCP عمل می كنند. اگر گیرنده بسته تقاضای اتصال ، بخواهد تقاضای اتصال را رد كند، بیت Rst را در هدر TCP برابر یك می كند و این بسته را به فرستنده برمی گرداند.

برنامه نویسی سوکت در زبان جاوا زمانی کاربرد دارد که دو اپلیکیشن نوشته شده در دو JRE متفاوت بخواهند با همدیگر ارتباط برقرار کنند. همان‌طور که در کدهای فوق می‌توان دید، شی ‎$server‎ سرور HTTP‌ که به وسیله تابع Socket()‎ و سرور وب سوکت WsServer ایجاد و به پورت 8080 اختصاص داده شده است را در بر دارد. این همان فایلی است که از خط فرمان برای فعال‌سازی سرور اجرا خواهد شد. با وجود یک API مبتنی بر رویداد، نیازی به پرسش (Poll) از سرور در خصوص به‌روزترین وضعیت منبع هدف وجود ندارد. وب سوکت‌ها برای فراهم کردن امکان تبادل و ارتباط میان دستگاه‌های AV (صوت و تصویر) از طریق IP (پروتکل اینترنت) ایده‌آل هستند.

1024 بایت فقط یک قرارداد رایج برای اندازه بار است، زیرا توان دو است که به طور بالقوه برای اهداف بهینه سازی بهتر از مقدار دلخواه دیگر است. شما آزاد هستید که این مقدار را هر طور که دوست دارید تغییر دهید. یک فایل با نام server.py ایجاد کنیدماژول سوکت را در اسکریپت پایتون خود وارد کنید. کد نوشتن کد بالا، برنامه درخواست کامپیوتر را منتشر میکند تا کامپیوتر های دیگر بتوانند به آن وصل شوند. معمولا برای شماره پورت، عدد 8000 رو انتخاب میکنیم؛ چون توی اتصال انگار قوی تر عمل میکنه؛ خودم هم نمیدونم چرا، ولی 8000 به بالا رو انتخاب کنید. این تابع چهار ورودی می‌گیرد که هر چهارتای آن‌ها به صورت پیش‌فرض تعریف شده و نیازی به تعریف آن‌ها نخواهیم داشت.

وب سوکت‌ها به دستگاه‌های اینترنت اشیا (IoT) مثل بلندگوها و سایر وسایل هوشمند امکان می‌دهند تا به طور روان و با کم‌ترین تاخیر و ردپای کد اندک ارتباط برقرار کنند. استفاده وسیع از زیرپروتکل MQTT به این معنی است که وب سوکت‌ها پیش از این نیز استانداردی برای انتقال داده در دستگاه‌های IoT بوده‌اند. پذیرش گسترده این استاندارد،‌ همکاری طیف وسیعی از دستگاه‌ها با یکدیگر را به طور یکپارچه امکان‌پذیر می‌سازد و پتانسیل سیستم‌های توزیع‌یافته وسیع را به وجود می‌آورد. وب سوکت یک پروتکل ارتباطی کاملاً دوطرفه و پایدار است که در بستر کلاینت-سرور و وب‌اپلیکیشن‌های بی‌درنگ به کار می‌رود. ابتدا چیستی وب سوکت و مفاهیم نظری آموزش وب سوکت از جمله تفاوت آن با پروتکل HTTP، کاربردها، مزایا و معایب وب سوکت و سایر مباحث مهم در این حوزه شرح داده شده‌اند. یکی از بخش‌های آموزش عملی وب سوکت در این مقاله به آموزش وب سوکت در PHP اختصاص داده شده است.

می‌توان مثال‌هایی که در بخش‌های قبلی آموزش وب سوکت ارائه شدند را با هم ترکیب کرده و یک اپلیکیشن کلاینت وب سوکت ساده ساخت. حال در ادامه آموزش وب سوکت در جاوا اسکریپت به پیاده‌سازی اپلیکیشن سمت کلاینت با HTML پرداخته شده است. وب سوکت برای اولین بار در مشخصه HTML5 به عنوان TCPConnection رویت شد. TCPConnection یک جایبان (Place Holder | دارنده مکان) برای یک API سوکت مبتنی بر TCP است. پروتکل وب سوکت توسط ایان هیکسون (Ian Hickson) و مایکل کارتر (Michael Carter) ساخته شده است و به وسیله کارگروه مهندسی اینترنت (IETF) در درخواست نظر 6455 و سال ۱۳۹۰ شمسی (۲۰۱۱ میلادی) استانداردسازی شد.

بخش اول كه مقداری از فضای 32 بیتی آدرس IP را به خود اختصاص می دهد و مشخص كننده شبكه ای است كه ماشین به آن تعلق دارد و برای تمام ماشین های موجود در یك شبكه یكسان است. این بخش بقیه بیت های موجود در آدرس IP را به خود اختصاص می دهد. یك راه برای تفكیك ماشین های موجود در شبكه استفاده از یك شناسه یكتاست. این شناسه باید برای هر ماشینی مقداری مستقل داشته باشد تا در شبكه با ماشین های دیگر اختلال نداشته باشد. در شبكه به این شناسه یكتا كه معرف ماشینی خاص است آدرس IP گفته می شود.

این تبادل سربرگ، یک پروکسی ذخیره‌ساز موقت (Caching Proxy) را از ارسال مجدد تبادلات قبلی وب سوکت باز می‌دارد. وب سوکت (WebSocket) یک پروتکل دوطرفه و کاملاً دو رشته‌ای است که مانند HTTP در ارتباط‌های کلاینت-سروری به کار گرفته می‌شود. این پروتكل به دلیل ماهیتی كه دارد، ممكن است از نظر امنیتی برای یك شبكه مشكل ایجاد كند. به همین دلیل است كه اكثر مدیران شبكه این سرویس مفید را از سیستم حذف می كنند یا آن را به حالت غیر فعال در می آورند. برای ارسال یك E.Mail در اولین گام شما باید به ماشینی در شبكه كه این سرویس بر روی آن فعال است متصل شوید.

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

معمولا هنگام ارسال بسته از یك hop به hop دیگر باید فرستنده به یك نحوی از رسیدن بسته به مقصد مطلع شود. به همین منظور در لایه پیوند داده ها یكسری پروتكل ها در نظر گرفته شده است. كاربرد این پروتكل ها علاوه بر كشف خطا می تواند قدرت گیرنده را برای دریافت بسته ها نیز در نظر بگیرد. اكنون كه با اصطلاحاتی در زمینه برنامه نویسی شبكه آشنا شدید احتمالا سوالاتی در ذهن شما به وجود آمده كه برای پیدا كردن پاسخ آن نیاز است كه با مفاهیم پایه شبكه آشنا شوید. پس به توضیح این مبانی در قالب مدل مرجع OSI كه یك مدل استاندارد برای ساخت شبكه های كامپیوتری است می پردازیم.

در صورتی که به هر دلیلی اتصال در دسترس نباشد یا اتصال بسته شده باشد، متد Send برای وضعیت اتصال نامعتبر یک استثناء ارسال می‌کند. هر یک از این دو متد وب سوکت در ادامه آموزش وب سوکت شرح داده شده‌اند. API وب سوکت این امکان را برای اپلیکیشن‌ها به وجود می‌آورد تا پروتکل وب سوکت را کنترل کنند و به رویدادهایی پاسخ دهند که به وسیله سرور ایجاد شده‌اند. در این بخش از آموزش وب سوکت ، به برخی از مزایا و معایب اصلی وب سوکت اشاره شده است. سرور با یک هش (Hash) در سربرگ «Sec-Websocket-Auth» پاسخ می‌دهد.

به منظور تسهیل همکاری موثر و به اشتراک گذاری دانش، از برنامه های چت مبتنی بر سوکت یا پلت فرم های تجزیه و تحلیل داده های مشترک استفاده می شود. فرآیند برنامه‌نویسی شبکه در پایتون می‌تواند بسیار پیچیده‌تر از ارسال یک رشته متنی باشد. هر چند که می‌توان تمام داده‌ها را به نوعی رشته‌ی متنی تبدیل کرد، اما برای سایر نوع‌های داده‌ای متدها و کتابخانه‌های مخصوصی وجود دارد. به این منظور از متدهای recv() و send() در ارتباط TCP و از متدهای recvfrom() و sendto() در ارتباط UDP در برنامه نویسی شبکه با پایتون استفاده خواهیم کرد. این تابع می‌تواند برای تعداد کانکشن‌های برقرار شده با سرور محدودیت مشخص کند. حداقل مقدار تعریف شده برای آن 0 و سقف آن با توجه به منابع سیستم سرور تعیین می‌شود.

پس در ادامه، منتظر دریافت تایید از سمت سرور مانده و پیام را دریافت کنیم. این کار را به راحتی با استفاده از تابع recv() انجام خواهیم داد. همان‌طور که گفته شد، پیام‌ها بر روی سوکت‌ها به صورت byte ارسال می‌شوند. در نتیجه می‌بایست رشته متنی را با استفاده از تابع encode() به رشته‌ی بایتی تبدیل کنیم. در ابتدای ایجاد کانکشن، ما یک کانکشن به آن طرف ارتباط ایجاد کرده و یک پورت را مشغول کرده‌ایم.

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

احتمالا شما تا به حال بارها از پست الكترونیكی ( E.Mail ) برای برقراری ارتباط با دیگران استفاده كرده اید. اتصال دستگاه ها برای تبادل اطلاعات چیزی است که در شبکه انجام می شود. سوکت ها بخش مهمی از ارتباطات موثر شبکه هستند، زیرا آنها مفهوم اساسی هستند که برای انتقال پیام ها بین دستگاه ها از طریق شبکه های محلی یا جهانی و فرآیندهای مختلف در یک ماشین استفاده می شود. آنها یک رابط سطح پایین ارائه می کنند که امکان کنترل دقیق بر ترافیکی که قرار است ارسال یا دریافت شود را فراهم می کند. شایان ذکر است که در بسیاری از برنامه های فوق، دانشمندان داده ممکن است مستقیماً در کار با سوکت ها دخالت نداشته باشند. آنها معمولاً از کتابخانه‌ها، چارچوب‌ها و سیستم‌هایی استفاده می‌کنند که تمام جزئیات سطح پایین برنامه‌نویسی سوکت را انتزاعی می‌کنند.

برای دریافت و ارسال پیام در سمت سرور، به طور کاملاً مشابه عمل خواهیم کرد. یعنی در ادامه کدهای قبلی server.py قطعه کدهای زیر را خواهیم نوشت. همچنین در سمت مشتری (client) نیز یک سوکت ایجاد کرده و تلاش می‌کنیم تا به مقصد localhost و پورتی که در سرور تعریف کرده‌ایم (در اینجا 14200) متصل شویم. هنگامی که دو نود در یک شبکه (روی یک یا دو سیستم) بخواهند با هم ارتباط برقرار کنند، باید ساختار خاصی را رعایت کنیم. اصطلاحاً به این ساختار، معماری سرویس‌دهنده – سرویس‌گیرنده (Client – Server) گفته می‌شود.

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

این اتصال‌ها معمولاً بین تلفن‌ها یعنی اتصال «دو طرفه» (Two End) و یک مکالمه یعنی همان انتقال داده‌ها انجام می‌شود. در این نوع از سوکت‌ها ارتباط‌ها با پروتکل TCP انجام شده و نوع آن «SOCK_STREAM» است. ادامه این بخش به بررسی «سوکت‌های خام» (Raw Socket) اختصاص داده می‌شود. پایتون یکی از محبوب‌ترین زبان‌های برنامه‌نویسی برای مبتدیان است. این زبان به دلیل سینتکس ساده و خوانا، یادگیری را بسیار آسان می‌کند. Python کاربردهای گسترده‌ای دارد؛ از توسعه وب و تحلیل داده‌ها گرفته تا هوش مصنوعی و یادگیری ماشین.

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

پس از پذیرش اتصال، سرور یک سوکت جدید متصل به همان پورت محلی را دریافت می‌کند و همچنین نقطه انتهایی راه دور خود را با نشانی و پورت کلاینت تنظیم می‌کند. سرور به یک سوکت جدید نیاز دارد تا بتواند در حین پاسخگویی به نیازهای کلاینت، به گوش دادن از طریق سوکت اصلی برای درخواست‌های اتصال جدید ادامه دهد. در صورتی که در سمت کلاینت اتصال پذیرفته شود، یک سوکت با موفقیت ایجاد شده است و کلاینت می‌تواند از سوکت برای ارتباط با سرور استفاده کند. از اینجا به بعد، اتصال به صورت دودویی (باینری) انجام می‌شود و با پروتکل HTTP تطابقی ندارد. یک برنامه سرور از همه اتصال‌های وب سوکت آگاه است و می‌تواند در قالب هر یک از این اتصال‌ها به طور مجزا ارتباط برقرار کند. تا وقتی که وب سوکت باز باقی بماند، سرور یا کاربر می‌توانند پیام‌هایشان را هر وقت که بخواهند ارسال کنند.

بیایید با استفاده از دستور socket() یک سوکت برای ساخت برنامه چت در پایتون ایجاد کنیم. برای ساخت برنامه چت در پایتون نیاز به دو فایل مختلف داریم، اولی به عنوان سرور (server.py) و دومی به عنوان کلاینت (client.py) شناخته خواهند شد. این مقدار را می‌توانید با توجه به ماهیت برنامه خود، بر روی مقدار دلخواهی تنظیم کنید. همان‌طور که می‌دانید حروف انگلیسی هر کدام معادل یک بایت هستند. درودبله کلاینت هم میتونه پیام بفرسته از طریق ساختار request و api. مثلا وقتی میخواید در یک سایت ثبت نام کنید اطلاعات خودتون رو وارد میکنید و دکمه ثبت رو میزنید.

وقتی یک کلاینت درخواست HTTP به سرور ارسال می‌کند، یک اتصال TCP بین کلاینت و سرور باز است و پس از دریافت پاسخ، اتصال TCP خاتمه می‌یابد. در هر درخواست HTTP اتصال TCP جداگانه‌ای با سرور ایجاد می‌شود. TCP یک پروتکل اتصال‌گرا است که تحویل بسته داده انتقالی را با استفاده از روش‌های دست‌دهی سه جانبه (3‎-Way‎ Handsha‎ke‎) و ارسال دوباره بسته‌های از دست رفته تضمین می‌کند. HTTP می‌تواند به وسیله هر یک از پروتکل‌های اتصال‌گرای پایا نظیر TCP و SCTP مورد استفاده قرار بگیرد. سیستم عامل میتواند هر درخواست ورودی را با استفاده از شماره پورت به پردازش نهایی ارسال کند. در سیستم عامل های یونیکسی یا ویندوز میتوانید با دستورات netstat یا ss سوکت های در حال استفاده و اطلاعات مرتبط را لیست کنید.

از لحاظ كارایی با روش Starting & Ending Characters , With Character Stuffing تفاوتی ندارد اما سربار ( Over Head ) آن كمتر می باشد ( شكل 5-1 ). اما حالت غیر اتصال گرا ( UDP ) مواقعی استفاده می شود كه خیلی دریافت اطلاعات توسط ماشین گیرنده اهمیتی نداشته باشد. در نهایت پس از حلقه while، اتصال سوکت کلاینت را با استفاده از روش close ببندید. این تضمین می کند که منابع به درستی آزاد شده و اتصال قطع می شود (یعنی زمانی که پیام "closed" را دریافت می کنیم و از حلقه while خارج می شویم). این تضمین می کند که منابع به درستی آزاد شده و اتصال قطع می شود (یعنی زمانی که پیام \"closed\" را دریافت می کنیم و از حلقه while خارج می شویم).

کلاس مورد نظر در بالاترین بخش پیاده سازی قرار میگیرد و جزئیات هر سیستم خاص را از برنامه جاوا شما مخفی می کند. Socket که یک طرف ارتباط دو طرفه ی بین برنامه ی جاوایی شما و برنامه ی دیگر که درون یک شبکه قرار دارند را فراهم میکند . هر endpoint که بالا نیز به آن اشاره کردیم دارای یک شماره پورت و یک ip است . در سیستم IPv6 هر بسته می تواند تا شش هدر اضافی دیگر نیز داشته باشد كه از این هدر ها می توان برای عملیات مسیریابی، رمزنگاری، تایید هویت ، قطعه بندی و … استفاده كرد. برای كار درشبكه به صورت واقعی نیاز به این همه جزئیات احساس نمی شود و پروتكل هایی كه در شبكه های واقعی مورد استفاده قرار می گیرند اغلب به حداقل جزئیات در هر قسمت قناعت می كنند. IPX/SPX‌ ، TCP/IP و Apple Talk نمونه هایی از پشته های پروتكلی هستند كه در شبكه های واقعی مورد استفاده قرار گرفته اند.

برای استفاده از یک شی سوکت در برنامه خود، با واردکردن کتابخانه سوکت شروع کنید. درودبرای اینکار باید به برنامه نویسی مسلط باشید و سورس روبیکا رو هم خوب بشناسید. همان طور که ملاحظه می‌کنید، همانند کد سمت سرور، در اینجا نیز ما برای تمیزی و خوانایی کد، شماره IP و port خود را در متغیرهایی به همین نام اختصاص داده‌ایم و متغیرها را در متد ()connect جایگزین کرده‌ایم. همان‌طور که مشاهده می‌کنید، ما مقدار 5 را به متد ()listen داده‌ایم که این عدد تعداد درخواست همزمان اتصال کلاینت‌ها را تعیین می‌کند و از 0 تا 5 قابل مقداردهی است. این دستگاه‌های شبکه دارای پردازنده CPU، حافظه، «گذرگاه» (Bus)، «بافرهای بسته واسط» (Interface Packet Buffer) هستند. پس از پیکربندی و راه‌اندازی، می‌توانید با استفاده از SQLAlchemy به پایگاه داده SQLite متصل شوید و عملیات CRUD (ایجاد، خواندن، به‌روزرسانی و حذف) را انجام دهید.

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

برنامه‌نویسی سوکت با پایتون روشی برای اتصال دو گره در یک شبکه برای برقراری ارتباط با یکدیگر است. یک سوکت (گره) به یک پورت خاص در یک IP گوش می‌دهد، درحالی‌که سوکت دیگر برای ایجاد یک اتصال به دیگری می‌رسد. سرور سوکت شنونده را تشکیل می‌دهد درحالی‌که کلاینت به سمت سرور می‌رود. برای یادگیری سوکت نویسی با پایتون لازم است پایه‌های خود را با دوره آموزشی پایه برنامه‌نویسی پایتون تقویت کنید و اصول اولیه را بیاموزید. همچنین آموزش سوکت نویسی با پایتون می‌توانید به شما در متخصص شدن در این راه کمک کند. برنامه نویسی سوکت با پایتون برنامه نویسی سوکت در پایتون (Socket Programming) با استفاده از کتابخانه‌ی استاندارد سوکت (socket) امکان‌پذیر است.

تعداد اختلاف بین بیتهای متناظر در رشته همطول را فاصله همینگ گویند. به بیان غیر رسمی به نوع ارتباط اول ( اتصال گرا ) ارتباط از نوع TCP گویند و اگر نوع برقرای ارتباط به حالت Data Gram ( غیر اتصال گرا ) باشد به آن UDP گویند. آرگومان دوم (socket.SOCK_STREAM) نشان می دهد که ما از یک سوکت TCP استفاده می کنیم. سرور به زبان عامیانه، یعنی کامپیوتر اصلی؛ یعنی اون کامپیوتری که همه بهش وصل میشن. سلامبرای پاسخ جامع و کامل میتونید به این نقشه راه سوکت پروگرمینگ مراجعه کنید. شبکه دارای چند نوع پروتکل است که از بین آن‌ها TCP و UDP بیش‌ترین مورد استفاده را دارند.

اگر دوست دارید در برنامه‌نویسی سوکت در پایتون به یک متخصص تبدیل شوید، کار با این سوکت را یاد بگیرید. سوکت‌های خام دسترسی به «پروتکل کنترل پیام‌های اینترنتی» (Internet Control Message Protocol | ICMP) را فراهم می‌کنند. این نوع از سوکت‌ها به طور معمول «مبتنی بر دیتاگرام» (Datagram Oriented) به حساب می‌آیند. مشخصات دقیق آن‌ها به اینترفیس ارائه شده توسط پروتکل بستگی دارند. سوکت‌های خام در برنامه‌های زیادی مورد استفاده قرار نمی‌گیرند.

این کد یک شی سوکت ایجاد می‌کند که ما در متغیر “sock” ذخیره می‌کنیم. پارامتر خانواده روی مقدار پیش‌فرض تنظیم‌شده است که عبارت است از Address Format Internet. رایج‌ترین رویکرد موجود، استفاده از روش «ناهمگام ورودی و خروجی» (Asynchronous I/O) است. این روش با کتابخانه asyncio نمایش داده می‌شود و در کتابخانه استاندارد نسخه ۳.۴ پایتون به بعد ارائه شده است. یکی از روش‌های سنتی حل این مشکل استفاده از «نخ» به حساب می‌آید. نکات ریز بسیاری در رابطه با این موضوع وجود دارند که باید در نظر گرفته شوند.

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

در بخش بعدی از مقاله «سوکت نویسی با پایتون چیست» ابتدا به آموزش سوکت نویسی سرور پرداخته می‌شود. سوکت شنود دقیقاً همان کاری را انجام می‌دهد که از نامش مشخص است. زمانی که کلاینت متصل می‌شود، سرور.accept()را فراخوانی می‌کند تا ارتباط را تأیید و کامل شود. کلاینت متد connect()را برای ایجاد ارتباط با سرور و «دست‌دهی سه طرفه» (Three Way Handshake) فراخوانی می‌کند. مرحله دست‌دهی از اهمیت بالایی برخوردار است؛ زیرا با استفاده از آن نسبت به وجود بخش‌های قابل دسترسی در شبکه اطمینان حاصل می‌شود. به عبارتی دیگر، به این وسیله، کلاینت می‌تواند به سرور دسترسی پیدا کند و برعکس این موضوع نیز صادق است.

ISO استاندارد هایی برای تمام لایه ها نیز تولید كرده است، گر چه این ها بخشی از خود مدل مرجع نیستند. با این کار ورودی شما به سرور منتقل می شود و در پنجره ترمینال آن نمایش داده می شود. سرور پاسخ خود را برای کلاینت ارسال می کند و کلاینت مجدداً از شما ورودی می خواهد. این کار تا زمانی ادامه می یابد که رشته "close" را به سرور ارسال کنید. هنگامی که سرور پیامی را از کلاینت دریافت می کند، به آن پاسخ می دهد. برای آن، در حلقه ارتباطی، از روش recv برای خواندن حداکثر 1024 بایت استفاده می کنیم.

اگر بایت سمت چپ یك IP عددی بین 128 تا 191 بود، آن آدرس IP یك آدرس در كلاس B است. در قسمت اول از سمت چپ آدرس شبكه مشخص می شود در قسمت وسط آدرس زیر شبكه و در نهایت در قسمت سمت راست آدرس ماشین در شبكه بیان می شود. الگوریتم بردار فاصله تنها گره های موجود در شبكه و همچنین تاخیر زمانی بین آن ها را مد نظر قرار می دهد. اما ممكن است در یك شبكه گسترده بین گره های مختلف مسیرهایی با پهنای باند متفاوتی وجود داشته باشد. این الگوریتم بسیار ساده بوده و از ایده ساختن یك گراف از شبكه تبعیت می كند.


برنامه نویسی خودآموز