توضیحات تکمیلی مربوط به مسابقه را در بلاگ Quera بخوانید: blog.quera.ir

پروژه‌ای - نت ورک


می‌خواهیم به کمک شما قسمت سرور یک پیام رسان را طراحی کنیم.

این سرور قابلیت عضو شدن (یا register)، و برای افرادی که عضو شده اند قابلیت ورود (یا login) و برای افرادی که وارد شده قابلیت خروج (یا logout) را داشته باشد. همچنین این سرور قابلیت ارسال پیام از یک کاربر به کاربر دیگر را نیز دارد و همچنین برای هر کاربر قابلیت دریافت همه پیام های ارسالی را داشته باشد.

برای برقراری ارتباط کلاینت ها پیام ها را به port شماره 1234 می‌فرستند و سرور باید به این port گوش بدهد تا کلاینت ها به آن متصل شوند.

بعد از برقراری ارتباط کلاینت با سرور هر بار که کلاینت یک درخواست می‌کند، سرور نیز یک یا چند پیام (بسته به نوع پیام فرستاده شده) ارسال می‌کند.

منظور از یک پیام یک رشته از هر کاراکتری (حتی فاصله) است.


درخواست register🔗

این پیام حاوی دو رشته است که به ترتیب نشان دهنده نام کاربری (یا username) و کلمه عبور (یا password) است. درصورت عدم وجود کاربری با این نام کاربری، این سرور یک حساب کاربری جدید ایجاد می‌کند و پیام "you registered successfully" را به کلایت ارسال می‌کند.

فرمت درخواست:

register username password

مثال درخواست:

register mohammad pa3word

در صورت وجود کاربری با نام کاربری مشابه، این درخواست انجام نمی‌شود و سرور پیام "this username registered" را به کلاینت ارسال می‌کند.

تضمین می‌شود دو رشته نام کاربری یا username و رمزعبور یا password شامل حداقل 3 کاراکتر و حداکثر 10 کاراکتر از حروف کوچک و بزرگ انگلیسی و ارقام باشد.


درخواست login🔗

این پیام حاوی دو رشته است که به ترتیب نشان دهنده نام کاربری (یا username) و رمز عبور (یا password) است. در صورت ثبت نام (یا register) بودن این نام کاربری و مطابق بودن رمزعبور با آن، سرور باید یک رشته به نام session که تاکنون برای هیچ کاربری ارسال نشده است را ایجاد و برای کلاینت ارسال کند. توجه کنید که رشته session باید شامل 30 کاراکتر از ارقام باشد.

فرمت درخواست:

login username password

مثال درخواست:

login mohammad pa3word

در صورت عدم تطابق نام کاربری با رمزعبور یا عدم ثبت نام این نام کاربری سرور پیام "wrong username or password" را به کلاینت ارسال می‌کند.


درخواست logout🔗

این پیام حاوی یک رشته است که نشان دهنده session است. در صورت وجود کاربری با آن session فعال (یعنی این session را login کرده و هنوز logout نکرده است.) این session را از مجموعه session های فعال این کاربر خارج می‌کند و سرور پیام "your session logout successfully" را به کلاینت ارسال می‌کند.

فرمت درخواست:

logout session

مثال درخواست:

logout 987654321098765432109876543210

در صورت عدم وجود چنین session سرور پیام "invalid session" را به کلاینت ارسال می‌کند.


درخواست send🔗

این پیام حاوی سه رشته session و username و message است و در صورت معتبر session و وجود یک کاربر با نام کاربری username ، پیام message را به همه session های فعال آن کاربر ارسال کند.

فرمت درخواست:

send session_of_sender contact_username message

مثال درخواست:

send 987654321098765432109876543210 ali salam baraadar

فرمت پیامی که باید برای کلاینت ارسال کنید:

sender: message

مثال فرمت پیام:

ali: salam baraadar

در صورت معتبر نبودن session سرور پیام "invalid session" را به کلاینت اسال می‌کند. در صورت عدم وجود کاربردی با نام کاربری username باید پیام "your contact did not register" توسط سرور ارسال شود. و در صورت موفقیت آمیز بودن ارسال پیام "your message send successfully" ارسال شود.


درخواست receive🔗

این پیام حاوی یک رشته session است و در صورت معتبر بودن session، ابتدا تعداد پیام هایی که به این کاربر ارسال شده ولی این session هنوز دریافت نکرده است را به او ارسال می‌کند. سپس به همان تعداد پیام برای کلاینت ارسال می شود.

فرمت این درخواست:

receive 987654321098765432109876543210

فرمت پیام هایی که برای کلاینت ارسال می‌شود:

number_of_message$sender: message_1$sender: message_2

مثال پیام هایی که برای کلاینت ارسال می شود:

2$mahdi: salam$mahdi: khubi?

(هر رشته بین $ یک پیام ارسال شده است.)

توجه کنید حتی در صورت وجود یک پیام هم باید تعداد پیام ها ارسال شود. در صورت معتبر نبودن session سرور پیام "invalid session" را به کلاینت اسال می‌کند.


محدودیت🔗

تضمین می شود حداکثر 20 کاربر به سرور متصل خواهد شد و حداکثر 50 درخواست داده می‌شود و طول پیام ها حداکثر 20 کاراکتر است.


نحوه ارسال🔗

اگر به زبان python میفرستید تعدادی فایل که فایل اصلی که اجرا می‌شود server.py است. برای این کار پروژه خود را zip کرده به صورتی که server.py در ریشه فایل zip قرار گیرد.

اگر به زبان java میفرستید تعدادی فایل که فایل اصلی که اجرا می‌شود server.java است. برای این کار پروژه خود را zip کرده به صورتی که server.java در ریشه فایل zip قرار گیرد.

اگر به زبان c++ میفرستید تعدادی فایل که فایل اصلی که اجرا می‌شود server.cpp است. برای این کار پروژه خود را zip کرده به صورتی که server.cpp در ریشه فایل zip قرار گیرد. توجه کنید که قبل از اجرا دستور make صدا زده میشود و فایل server.cpp باید به فایل اجرایی ‍server تبدیل شود.

اگر به زبان c# میفرستید یک پروژه باید داشته باشیم که نام این پروژه ‍server‍ است این پروژه را به صورتی zip کنید که فایل ‍server.csproj در ریشه فایل zip قرار گیرد.

فایل zip را ارسال کنید.

ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.