لینک کوتاه : https://magicfile.ir/?p=2526
دانلود نمونه سورس کد Genesis UDP Server and Client سی شارپ
پروژه Genesis UDP یک کتابخانه کلاسی است که یک سرور و سرویس گیرنده UDP سبک وزن را با استفاده از عملکرد سوکت های دات نت پیاده سازی می کند. از UDP برای پایین نگه داشتن مقدار داده ارسال شده در سراسر شبکه استفاده می کند و دارای ویژگی های زیادی مانند رمزگذاری اولیه، بسته های متوالی و کانال قابل اعتماد است.
Genesis از طریق "بسته های فرمان" ارتباط برقرار می کند - یک بسته دستوری یک یا چند بسته UDP است که دارای اپکد 2 بایتی و تعداد متغیر فیلدهای رشته ای است. بسته های غیرقابل اعتماد می توانند تا 512 بایت باشند، بسته های قابل اعتماد می توانند طولانی تر باشند اما توسط Genesis تقسیم می شوند و به ترتیب ارسال می شوند. تعدادی آپکد داخلی توسط Genesis استفاده می شود، اما جدا از این که نحوه مدیریت بسته ها، کدهای عملیاتی و فیلدها کاملاً بر عهده توسعه دهنده برنامه میزبان است.
همچنین یک سیستم رمزگذاری اختیاری وجود دارد که خیلی پیشرفته نیست، اما اگر فعال باشد، یک کلید تصادفی 320 بیتی برای هر کلاینت متصل ایجاد می کند و از آن کلید در یک الگوریتم رمزگذاری XOR استفاده می کند. این کاملاً ایمن است زیرا هیچ دو کلاینت کلید یکسانی را به اشتراک نمیگذارند، با این حال به بستههای اتصال اولیه متکی است که بو داده نمیشوند. افزودن رمزگذاری کلید عمومی/خصوصی و غیره یک پیشرفت احتمالی برای کتابخانه است. می توان انتخاب کرد که کدام اتصالات رمزگذاری شده و کدام نه.
Server در مقابل Client
Genesis بر این اساس کار می کند که هر نمونه از Genesis می تواند هم مشتری و هم سرور باشد. خط بین کلاینت و سرور محو است، زیرا هر برنامهای که از Genesis استفاده میکند میتواند هم به سرورها متصل شود و هم اتصالات مشتریان را بپذیرد. البته، کلاینتها نمیتوانند فقط بهطور پیشفرض متصل شوند - رویدادهای مناسب باید در برنامه میزبان قلاب شوند تا عملکرد فعال شود. سرور به عنوان میزبان راه دوری تعریف می شود که اتصال را پذیرفته است، در حالی که مشتری میزبان راه دوری است که اتصال را آغاز کرده است. از آنجایی که یک نمونه از Genesis می تواند هر دو را انجام دهد، می تواند هم سرور و هم مشتری برای نمونه های دیگر Genesis باشد. سرورها و کلاینت ها در مجموع به عنوان میزبان شناخته می شوند.
نمودار بالا نشان می دهد که چگونه ایده کلاینت ها و سرورها در Genesis کار می کند. هر کادر آبی نمونه ای از کتابخانه Genesis را نشان می دهد - هیچ کدام به طور خاص سرور یا کلاینت تعیین شده نیستند زیرا هر دو به طور بالقوه می توانند اتصالات را بپذیرند و شروع کنند. تعریف سرور و کلاینت تنها در زمینه یک نمونه Genesis معتبر است. اجازه دهید "پیدایش 1" را در نظر بگیریم، به سرورهای 2 و 3 متصل است، و 4 به عنوان مشتری متصل است، این توسط جهت فلش ها تعیین می شود (فلش ها نشان می دهند که کدام جعبه اتصال را آغاز کرده است). اگر به چشم انداز "پیدایش 2" نگاه کنیم، می بینیم که فقط دو مشتری وجود دارد، 1 و 3. با این حال، اگر به دیدگاه "پیدایش 4" نگاه کنیم، یک سرور وجود دارد، "پیدایش 1". توجه کنید که چگونه "پیدایش 1"
زمینه
ایده Genesis بر اساس نگاه کردن به پروتکلهای شبکه بازیهای مختلف FPS آنلاین مانند Quake و Half-Life بود که از UDP برای برقراری ارتباط سریع بین سرور بازی و کلاینتهای متصل آن استفاده میکنند. این پیاده سازی ها گزینه ای برای ارسال بسته های قابل اعتماد و توالی دارند - توانایی هایی که در Genesis نیز گنجانده شده اند. هدف اصلی Genesis شروع یک API شبکه زیربنایی برای یک موتور بازی نوشته شده در دات نت بود، با این حال پتانسیل آن به حدی است که به عنوان یک پروژه مستقل در اختیار جامعه قرار گرفته است.
سه رابط وجود دارد که باید برای اجرای عملکرد Genesis استفاده شود. اینها هستند:
- IConnection
- ICommand
- IGenesisUDP
اشیاء IConnectionاطلاعات مربوط به هر اتصال به یک میزبان راه دور را نگه میدارند، خواه آن میزبان سرور یا مشتری باشد. ICommandاطلاعاتی را در مورد یک بسته فرمان منفرد، از جمله فیلدهای opcode و داده، نگهداری می کند. IGenesisUDPکلاس ارتباطات واقعی است که تمام عملکردها را کنترل می کند.
همراه با منبع دو پروژه "GenesisChatServer" و "GenesisChatClient" هستند. اینها یک جفت پروژه هستند که یک سیستم چت مشابه IRC را پیاده سازی می کنند. استفاده از این پروژه ها به عنوان نقطه مرجع باید به درک کلاس های Genesis کمک کند.
برای شما کاربر عزیز پیشنهاد دانلود داده می شود.