ََUnkown Pirate
ََUnkown Pirate
خواندن ۳ دقیقه·۳ سال پیش

برنامه نویسی سوکت در زبان C با لینوکس


تو این نوشته قصد داریم با سوکت ها اشنا بشیم ، کاربرد های اونها بدونیم و با استفاده از زبان C یک برنامه سوکت بنویسیم.خب حالا قبل از هر کار توضیح بدیم که سوکت ها چه هستند و چه کار هایی برای ما انجام میدن.

یک سوکت یک اتصال بین دو دستگاه داخل شبکه اینترنته. که یکی از این دستگاه ها باید نقش سرویس دهنده(server) اجرا و دیگری در نقش کلاینت ظاهر میشه.خب یک مثال از سوکت ها اینه که زمانی که شما

مرورگرتون باز میکنید و چیزی جستجو میکنید . مروگر شما یک از اتصال سوکت به یک سرور مثلا گوگل برقرار میکنه، و درخواست اطلاعات از گوگل میکنه،مشابه بعضی برنامه های چت مثل اسکایپ.

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

فرایند یک ارتباط سوکت
فرایند یک ارتباط سوکت

ما قراره که تو یه سری مقاله یک برنامه چت ساده با استفاده از سوکت ها و زبان C بنویسیم و کارکردن با سوکت ها در زبان C یاد بگیریم.برنامه ما از دو قسمت تشکیل میشه یک سرور و یک کلاینت و ما به مرور این دو قسمت از کد کامل میکنیم تا در نهایت یک برنامه چت با استفاده از سوکت ها داشته باشیم.

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

سرور:

در ابتدای کار کتاب خونه های مورد نیاز به برنامه اضافه میکنیم.

و یک شی سوکت ایجاد میکنیم:

مقدار دهی سوکت:

در این قسمت ما یک ساختار sockaddr_in برای سرور ایجاد کرده ، و مقادیر اولیه برای اون تنظیم کردیم.

مرحله بعد Bind :

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

برای این که ببینید چه برنامه هایی در سیستم شما مشغول گوش دادن به چه پورت هایی هستند از دستور :

sudo netstat -tulpn

استفاده کنید.

مرحله بعد Listen :

خب حالا ما موفق شدیم که توسط سروری که ساختیم به پورت ۸۸۸۸ سیستممون گوش بدیم.

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

تو این قسمت از کد ما منتظر هستیم تا کلاینتی از طریق پورت ۸۸۸۸ به ما درخواستی بده. زمانی که کلاینتی

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

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

برای این که این کد اجرا کنیم با استفاده از کامپایلرتون کد رو کامپایل کنید . من از gcc استفاده کردم.

و اونو اجرا میکنیم:

خب ما هنوز کد کلاینت مون ننوشتیم پس برای امتحان سرورمون از telnet استفاده میکنیم:

خب تبریک میگم سرورمون با موفقیت کار کرد و به یک اتصال برقرار کرد و به درخواست ما پاسخ داد.

https://gist.github.com/Ehsan-hsr/cbb0eb167656ed5e14845262dfe85154

اینم کد کامل سرور ما تا این قسمت،در قسمت های بعدی کد کلاینت مینویسیم و امکانات بیشتری به برنامه خودمون اضافه میکنیم تا در نهایت یک برنامه چت ساده با استفاده از سوکت ها داشته باشیم

برای مطالعه بیشتر:

https://www.binarytides.com/socket-programming-c-linux-tutorial/


https://www.geeksforgeeks.org/socket-programming-cc/


https://realpython.com/python-sockets/










برنامه نویسیcsocket
دانشجوی مهندسی برق، برنامه نویس
شاید از این پست‌ها خوشتان بیاید