درس 12 : نوشتن بازیهای تحت شبکه با SDL_net قسمت اول

درس 12 : نوشتن بازیهای تحت شبکه با SDL_net

 

در این درس شما  با SDL_net اشنا می شوید کتابخانه الحاقی مورد علاقه من. حتی اگر با برنامه نویسی شبکه اشنا نیستید می توانید sdl_net را به عنوان یک کتابخانه بشناسید ولی پیشنهاد من این است که قبل از خواندن این بخش اطلاعاتی در مورد شبکه پیدا کنید

 

همانطور که با دانستن اینکه چگونه می توانید یک pixel را در صفحه مقدار دهی کنید می توانید تمام دنیای گرافیک (بر روی مانیتور خود) را در دستان خود بگیرید از 2 بعدی تا 3 بعدی (3 بعدی هم نوعی دو بعدی است بر روی مانیتور)  در شبکه هم وقتی فهمیدید چگونه می توانید packet (بسته)(منظور چند بایتی است که به عنوان اطلاعات در نظر گرفته می شود) را از کامپیوتری به کامپیوتر دیگر منتقل کنید تمام دنیای شبکه در دستان شماست!! .

 

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

چند تا چیز هست که قبل از شروع با SDL_net باید یاد بگیرید. اگر شما معتاد اینترنت باشید یا با بازیهای تحت اینترنت خودتون سرگرم میکنید ( مثل من!) بعضی واژه ها باید واسه شما اشنا باشد.

 

اولیشون واژه IP , IP مخفف کلمه Internet Protocol و فقط مشخص کننده یک راه استاندارد و مورد تایید همه است برای مشخص کردن یک کامپیوتر بر روی اینترنت است ip شما مجموعه ای از 4 شماره است که با نقطه از هم جدا شدند شبیه 127.0.0.1 هر شماره بین دو عدد 0 تا 255 است این به این معنی که هر IP ادرس حاوی 4 بایت است هر عدد یک بایت IP شما مشخص کننده ادرس شماست بر روی شبکه واین که شما کجای این کره خاکی هستید.

 

دومی اش واژه Socket است یک سوکت یک کانکشن ساده است است از یک کامپیوتر به کامپیوتر دیگر یا از یک IP به IP دیگر بر قرار می شود . سوکت به شما اجازه می دهد که با کامپیوتر های دیگر ارتباط برقرار کنید و به گشت و گزار در اینترنت بپردازید ( راستی این اینترنت ملی چی شد!؟ )

 

2 تا واژه بعدی واژه هم Client و Server هستند اینها هم در اصل مشخص می کند کامپیوتر شما چه رولی را در بازی ایفا می کند معمولا پشت سرور های بازی کسی نمی شیند و بازیکنا پشت کلاینت می شینند. نقش سرور پروسس کردن وعکس العمل نشان دادن نسبت به اطلاعاتی است که کاربران می فرستند client هم همان کامپیوتر کاربر هست که اطلاعات به سرور ارسال میکند

 

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

 

خوب حالا می رویم به سراق اینکه چگونه شبکه ها کار می کنند ساده ترین نوع شبکه شبکه ایست که در زیر می بینید که شامل دو کامپیوتر A و B است که به هم وصل شده اند

Yoho

 

در شکل بالا AوB می توانند هر دو یک سرور باشند یا کلاینت باشند وفقط یک اتصال بین این دو است که تمام نیاز هارا بر طرف می کند برای سادگی فرض می کنیم هر دو کلاینت باشند بنابر این یک ارتباط P2P (Peer-to-Peer ) یا نقطه به نقطه به ما می دهد که عبارت است یک ارتباط ساده که سروری در ان وجود ندارد شما می تونید کامپیوتر های بیشتری هم به این شبکه اضافه کنید مثل شکل زیر که شدند 4 تا کامپیوتر A,B,C و   D

 

 

همانطور که می بینید هر کامپیوتر با 3 کامپیوتر دیگر ارتباط جداگانه ای دارد بوسیله 6 کانکشن جدا از هم هر کامپیوتر دیگری که به این 4 تا اضافه شود کانکشن های زیادی باید به این شبکه باید اضافه شود پس به ازای N تا ماشین N * (N-1) / 2  تا کانکشن لازم داریم مثلا 20 تا ماشین می شود 190 تا کانکشن پس واسه تعداد بالا این مدل جواب نمی دهد .

  

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

alooo

 

در دریاگرام بالا کامپیوتر A به عنوان سرور است و بقیه کلاینت هستند . کلاینت اطلاعات به کامپیوتر A می فرستد و سرور هم اطلاعات بقیه کامپیوتر ها را در صورت لزوم Update می کند در اینجا 6 کامپیوتر هست و 5 کانکشن اگر Peer to peer بود می شد 15 تا کانکشن.

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

 

شما باید نوع خودتون را انتخاب کنید برای بازیهای که دو نفر تحت اینترنت یا شبکه محلی به هم وصل می شوند مثل بیلیارد بهترین انتخاب P2P است و بازیهای مثل counter-strike بهتره از نوع کلاینت سرور باشند .

 

نصب :

برای نصبش هم به درس 3 مراجعه کنید مثل SDL_image است

از قسمت پروژه ها دانلود کنید

http://libsdl.org/projects

 

SDL_net در یک نگاه:

4 قسمت جداگانه در SDL_net وجود دارد که هر کدام ساختاری جدا گانه ای دارد این 4 تا عبارتند از : آدرس IP  ,   سوکت TCP , سوکت UDP و Set Socket .

 

IP Address:

مشخص کننده آدرس کامپیوتر هایی است که با هم ارتباط برقرار می کنند هر کامپیوتر با یک IP   که یک شناسه 4 بایتی است و port هم که یک شناسه 16 بیتی است ( که مشخص کننده این است که از طریق کدام مدخل باید ارتباط برقرار شود مثلا مدخل 80 یا همان پورت 80 ) شناخته می شود

که در SDL_net با استراکچر IPadreess شناخته می شود.

 

TCP Socket:

شما از سوکت TCP (Transfer Control Protocol ) برای ساخت یک کانکشن بین دو کامپیوتر استفاده می کنید TCP یک پروتکل ( شما فکر کنید یک زبان استاندارد مثل عربی ) برای انتقال اطلاعات است ما دو نوع سوکت TCP داریم سرور و کلاینت . استفاده از پرتکل TCP تضمین می کند که اطلاعاتی که شما می فرستید حتما به مقصد درست می رسد سوکت TCP بوسیله ساختار TCPSocket تعریف می شود که بیشتر به عنوان یک اشاره گر تعریف می کنیم.

 

UDP Socket:

UDP(User Datagram Protocol) سوکتی شبیه به سوکت TCP است.فرقشان این است که تضمین نمی کند که اطلاعات سالم برسند ولی سرعت بیشتری دارند چون اطلاعات چک نمی شوند.

مثلا واسه ارسال ویدئو مناسب است. با ساختار UDPSocket شناسایی می شود و معمولا به عنوان اشاره گر تعریف می شوند.

 

Socket Sets:

عبارت است از مجموعه از سوکت ها و معمولا توسط سرور ها استفاده می شود برای دریافت اطلاعات ورودی از کلاینت ها و بوسیله ساختار SDLNet_SocketSet شناسایی می شوند

 و معمولا به عنوان اشاره گر تعریف می شوند.

 

نظرات 1 + ارسال نظر
مجید جمعه 17 فروردین‌ماه سال 1386 ساعت 11:10 ب.ظ http://2482162.blogfa.com

سلام
عیدت مبارک باد
وبلاگت خیلی قشنگه.من صاحب وبلاگ دنیای هک ولینک باکس اینترنت رایگان هستم.من دنبال وبلاگ هایی هستم که در این زمینه باشند.اگر مایل باشی با ثبت لینک خود در لینک باکس من (یعنی خودت) لینکت را در معرض دید همه قرار دهی وبازدید های وبلاگت را 1500%افزایش دهی..
پس از ثبت لینک باید کد زیر را در قسمت ویرایش قالبت قرار دهی تا لینکت در لینک باکس قرار گیرد:

<!-- Begin ParsTools.com Linkbox Code --><iframe id="main" src="http://www.parstools.com/linkbox/?linkbox=542" scrolling="yes" frameborder="0" hspace="0" target="_self" name="parstools" align="center" width="450" height="300"></iframe>
<p align="center" dir="rtl" Style="font-weight: 400">
<!-- PayPerClick Advertise Ment system -->
<script language='JavaScript' type='text/javascript' src='http://www.agpshop.com/webmasters/showbanner.php?uname=majidas2006&bID=17' ></script>

<!-- End ParsTools.com linkbox code -->
لطفا با من همکاری کنید وتغییری در سایز لینک باکس ندهید وبرای زیبا ماندن وب خود لینک باکس را در انتهای قالب خود قرار دهید.
با تشکر به وبم سر بزن
http://2482162.blogfa.com

برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد