در این پروژه، باید یک سامانه نظرسنجی آنلاین برای بازیهای شهرآورد طراحی کنید که از طریق سوکتها، ارتباط بین یک سرور و چندین کلاینت را مدیریت کند. هر کلاینت باید بتواند به سرور متصل شده و به یک گزینه رأی دهد. پس از پایان رأیگیری، سرور باید نتایج را جمعآوری و به کلاینتها اعلام کند.
پروژه اولیه
پروژهی اولیه را میتوانید از این لینک دانلود کنید. ساختار این فایل به صورت زیر است:
vote.zip
├── client.c
└── server.c
نحوهی اجرا کردن پروژه
بعد از اجرا کردن دستورهای زیر به ترتیب server
و client
راهاندازی میشوند.
gcc -std=gnu11 -o server server.c -lpthread
./server <port>
gcc -std=gnu11 -o client1 client.c
./client1 <port>
gcc -std=gnu11 -o client2 client.c
./client2 <port>
...
جزئیات پیادهسازی
راهاندازی سرور
- سرور باید بتواند چندین کلاینت را به صورت همزمان مدیریت کند.
- سرور باید روی پورت
<port>
تنظیم شود که مقدار آن بهصورت آرگمان ورودی داده میشود. - اگر هنگام ساختن سوکت با خطا مواجه شد بلافاصله خطای
Socket Error
را چاپ کند. - اگر این پورت قابل استفاده نیست بلافاصله خطای
Bind Error
را چاپ کند. - در صورتی که هیچ کدام از خطاهای بالا رخ نداد،سرور باید بعد از راهاندازی بلافاصله پیام
Ready To Get Votes...
را به صورت استاندارد چاپ کند.
پس از اتصال هر کلاینت، سرور باید متن و گزینههای نظرسنجی را به هر کلاینت ارسال کند و از آنها درخواست کند که یک عدد (نمایانگر گزینه) را به عنوان رای انتخاب کنند. متن پیام نظرسنجی باید عبارت زیر باشد:
Who Is Winner?
1.Persepolis
2.Esteghlal
سرور پس از دریافت رأی از هر کلاینت، باید رأی را ذخیره کرده و بلافاصله پیام We Got Your Vote.
را برای تأیید رأی به کلاینت ارسال کند. در صورتی که رأی کاربر برابر 1
یا 2
نیست. بلافاصله عبارت Invalid Vote.
را باید به کلاینت ارسال کند.
سرور پس از دریافت هر رأی از از کلاینتها، نتیجهی رایگیری را بهصورت زیر چاپ کند.
Current Votes: Persepolis: 6 Esteghlal: 4
کلاینت
- هر کلاینت باید از طریق همان
<port>
بتواند به سرور متصل شود و گزینههای رأیگیری را دریافت کند. - کلاینت باید بتواند یکی از گزینهها را انتخاب کرده و آن را به سرور ارسال کند.
- پس از ارسال رأی، کلاینت باید پیام تأیید رأی را از سرور دریافت کند.
شرایط و محدودیتها
- برای مدیریت هر کلاینت باید از یک thread یا پروسه جداگانه در سرور استفاده شود.
- از پروتکل TCP برای ارتباط پایدار و از
send
وrecv
برای ارسال و دریافت دادهها استفاده شود.
آنچه باید آپلود کنید
[your-solution-file-name].zip
├── client.c
└── server.c
ارسال پاسخ برای این سؤال