ورود

View Full Version : سوال: كار با سوكت ها به روش UDP



bmanfy
دوشنبه 22 آذر 1389, 23:35 عصر
سلام.
ميخوام يك سرور طراحي كنم براي اجراي يك بازي بين دو نفر تحت شبكه . (برنامه مار دو نفره )
براي برقراري ارتباط توصيه شده(توصيه كه چه عرض كنم گفته شده) از سوكت ها به ذوش UDP استفاده بشه .
به صورت TCP قبلا كار كردم اما UDP نه.
اولا كه ايا براي اين برنامه UDP مناسبه ؟
بعدش اينكه اصلا چه طوري بايد كار كنم؟خيلي فرق داره با TCP؟
من قبلا از كامپوننت هاي indy براي Tcp استفاده كرده ام .
ممنون :)

Felony
سه شنبه 23 آذر 1389, 06:37 صبح
در مورد مناسب بودن که کار خاصی انجام نمیدید که مناسب باشه یا نه ، در مورد چه طور کار کردن هم تو اینترنت و راهنما Indy مطالب زیادی هست و میتونید از همون Indy برای ارتباط استفاده کنید .

vcldeveloper
سه شنبه 23 آذر 1389, 12:50 عصر
اولا كه ايا براي اين برنامه UDP مناسبه ؟
اگر ویژگی های هر کدوم رو بدونید، و نیازهای خودتان را هم بشناسید، معلوم میشه که مناسب هست یا نیست. اگر بخوایم به طور کلی بگیم، UDP برای بازی ها و فعالیت های ارسال صوت و ویدئوی آنلاین مناسب هست، چون بسته ها با تاخیر کمتری نسبت به TCP به سر انجام میرسند، ولی UDP ویژگی های خاص خودش را داره که خیلی هاشون برای خیلی از کاربردها ویژگی خوبی محسوب نمیشند.

UDP رسیدن یک بسته به مقصد، تعداد دفعات رسیدن بسته به مقصد، یا ترتیب رسیدن بسته ها در مقصد را ضمانت نمیکنه؛ یعنی تضمینی وجود نداره که بسته ارسالی شما حتما به مقصد برسه، تضمینی وجود نداره که اگر بسته رسید، حتما یکی باشه، و مثلا مقصد یک بسته را چند بار دریافت نکنه. تضمینی وجود نداره که بسته ها به همان ترتیبی که ارسال کردید، دریافت بشند، مثلا ممکنه بسته دوم زودتر از بسته اول به مقصد برسه. UDP مکانیزم ساده تری نسبت به TCP داره. UDP بر خلاف TCP برای نقل و انتقال داده نیاز به برقرای Connection نداره.

درباره تفاوت ها و کاربردهای این دو، لینک زیر خوب و خلاصه توضیح داده:

http://www.diffen.com/difference/TCP_vs_UDP

از نظر کار با UDP بوسیله Indy در دلفی و تفاوت آن با TCP هم لینک زیر توضیحاتی داده و مثالی از یک برنامه چت مبتنی بر UDP ارائه کرده:

UDP Makes a Difference (http://delphi.about.com/od/adptips2005/qt/udpvstcp.htm)

bmanfy
دوشنبه 06 دی 1389, 14:33 عصر
سلام.
وقتي يك شي IdUDPServer در برنامه قرار ميدم و قصد دارم براي رويداد OnUdpRead كد بنويسم خطا زير دارده ميشه :


[Error] Unit1.pas(32): Undeclared identifier: 'TIdSocketHandle'

و مياد رو خط تعريف تابع قرار ميگيره


procedure IdUDPServer1UDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle);

vcldeveloper
دوشنبه 06 دی 1389, 14:47 عصر
[Error] Unit1.pas(32): Undeclared identifier: 'TIdSocketHandle'
یونیت IdSocketHandle را به لیست uses یونیت مورد نظرتان اضافه کنید.

bmanfy
سه شنبه 07 دی 1389, 10:45 صبح
ممنون از پاسخ ها
يه اموزش (مقاله ، فايل PDF، ....) كه در باره كلا سوكت ها گفته باشه لازم دارم .
البته براي برنامه نويسي سوكت بر اساس UDP كه تمام جنبه ها رو گفته باشه و اموزش اصولي دارده باشه . (ترجيحا با indy)
پيشاپيش ممنون