برنامه نویسی سوکت در پایتون – قسمت اول

خوب سوکت چیه؟

سوکت یک کانال ارتباطی بین دو برنامه هست که در پروتکل TCP یا UDP انجام میشه

برنامه معروفی که برای ارتباط سوکت بین دو کامپیوتر استفاده میشه telnet هست

مثال دریافت صفحه یک سایت با سوکت به وسیله telnet

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

مثال دریافت whois با سوکت به وسیله telnet

حالا همین کار رو میخوایم با پایتون انجام بدیم

خوب شروع میکنیم

socket_family میتونه AF_INET (برای IPv4) و AF_INET6 (برای IPv6) باشه و یا AF_UNIX

socket_type هم میتونه SOCK_STREAM (برای استفاده از پروتکل TCP) و SOCK_DGRAM (برای استفاده از پروتکل UDP) باشه. دو پروتکل TCP و UDP موارد استفاده متفاوتی داره

در ۹۹ درصد مواقع خانواده AF_INET درکنار پروتکل TCP کارتون رو راه میندازه

پس اگه بخوایم یک سوکت در IPv4 با پروتکل TCP داشته باشیم

برای اتصال به یک سرور از تابع connect باید استفاده کنیم اگه از AF_INET استفاده کنیم تابع connect دو مقدار addr و port رو میگیره

addr میتونه نام هاست و یا آدرس آی پی باشه و port هم پورت موردنظر برای اتصال هست.

نکته: برای به دست آوردن آی پی یک هاست میتونید از تابع gethostbyname استفاده کنید

خوب الان میخوایم صفحه اول یک سایت رو بگیریم

برای ارسال اطلاعات از تابع send استفاده میکنیم تابع send بایت قبول میکنه برای همین باید اطلاعات رو انکد کنید و چون utf-8 استاندارد بیشتر سرورها هست از utf-8 استفاده میکنیم. QUERY دستوری هست که میخواید بفرستید.

برای مثال اگه بخوایم صفحه اول یک سایت رو دانلود کنیم:

برای دریافت صفحه اول سایت باید هدرهای بالا رو بفرستیم اگه مرورگرتون رو باز کنید و به بخش developertools برید و یک سایت رو باز کنید متوجه هدرهای بالا میشید.

نکته: ما همه دستورها رو در قالب یک رشته بزرگ فرستادیم میتونیم اونها رو جدا کنیم و تکی بفرستیم مثل نمونه زیر البته فکر میکنم فرستادن یک رشته بزرگ قابل اعتماد تر از این روش باشه.

نکته: هدر Host ضروری هست شما با ارسالی این هدر به سرور دستور میدید که یک سایت مشخص رو بده همونطور که میدونید در هر سرور تعداد زیادی سایت میتونه قرار داشته باشه.

نکته: هدرها با r\n\ از هم جدا شدن (در واقع ما باید نشونه ای رو بفرستیم که به سرور بفهمونیم بره خط جدید که اگه سرور لینوکس باشه این نشونه n\ هست و اگه ویندوز باشه r\n\ هست پس برای اینکه دستورمون در همه سرورها قابل اجرا بشه همون r\n\ رو میزنیم) در انتها هم دوباره باید اضافه کنید که در واقع عین فشردن کلید اینتر میمونه و سرور نتیجه رو به ما میده.

نکته: تقریبا همه سایتها روی پورت ۸۰ اجرا هستند برای همین به پورت ۸۰ سرور سوکت میزنیم.

در مثال بالا با تابع recv به اندازه ۴۰۹۶ بایت از اطلاعات دریافت شده از سرور رو میخونیم این عدد دلبخواه هست البته خود پایتون توصیه کرده که این عدد توانی از ۲ باشه تا بهترین هماهنگی بین سخت افزار و نرم افزار باشه

یادتون نره که وقتی کارتون تموم شد سوکت رو ببندید

یک مثال دیگه

میخوایم whois یک دومین رو بگیریم برای این کار باید به سرور whois.nic.ir با سوکت وصل شیم و اطلاعات بفرستیم و نتیجه رو بگیریم

 

نکته: انتهای اطلاعات ارسالی باید r\n\ (همونطور که توضیح دادم) بزارید همونطور که گفتم عین زدن کلید اینتر میمونه

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

جستجو در کل مطالب سایت

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *