View Full Version : یک بار ارسال فایل توسط indy به چند کلاینت
شنبه 17 بهمن 1383, 11:59 صبح
سلام خدمت همه دوستان دلفی کار .
فرض یک برنامه داریم که یک سرور داره و با idtcpserver کار میکنه و چندین کلاینت به این سرور توسط idtcpclient وصل هستند . حالا سوال من اینه که چطوری یک فایل رو با یک بار ارسال به تمام کلاینتها ارسال کنم . مشکل من در ارسال فایل نیست بلکه یک بار ارسال کردن به تمام کلاینتها در یک لحظه است .
با تشکر از دوستانی که راهنمایی نمایند .
Touska
شنبه 17 بهمن 1383, 17:54 عصر
شما باید Thread خود را LockList کرده و آن را در یک حلقه قرار داده و برای تمام کاربران فعال Stream خود را ارسال نمایید
موفق باشید :موفق:
یک شنبه 18 بهمن 1383, 15:59 عصر
سلام
پیشاپیش از لطف شما متشکرم .
میشه بیشتر توضیح بدین . :گیج:
در یک حلقه قرار دهم یعنی برای هر کدام در یک نوبت حلقه بفرستم ؟ این وضهیت رو وخیم میکنه . :strange:
من میخوام با یکبار ارسال به همشون فایل ارسال بشه ؟
:flower:
Touska
یک شنبه 18 بهمن 1383, 19:38 عصر
به این روش :
Try
With IdtcpServer.LockList Do
Begin
For I := 0 To Count Do
Begin
TidPeerThread(YourThread).Connectoin.WriteStream(S tream);
End;
End;
Finally
IdTcpserver.UnLockList;
End;
YourThread باید Thread های ذخیره شده در یک Pointer باشد
Stream فایل ارسالی شما می باشد
:موفق:
سه شنبه 20 بهمن 1383, 13:22 عصر
سلام مصطفی جون ( touska ) دستت درد نکند از راهنمایی ات
اگه هر thred مربوط به یک کلاینت باشه یا همون درخواستهای کلاینتها ؛ خوب اگه ما برا هر thred یک بار stream رو بفرستیم این همون میشه . :گیج:
شرمنده اینقدر سرت رو هم میبرم شما که لطف داری حالا دوباره لطف کن و بازم توضیح بده .
متشکرم
:oops: :oops: :oops:
:flower:
:flower:
Touska
سه شنبه 20 بهمن 1383, 18:27 عصر
ببین تیکه برنامه ایی را که فرستادم کار با آن به این شکل هست
که هر کاربر که متصل می شود شما مشخصات آن و Dns آن را در یک Record ذخیره کرده
و Thread آن کاربر را در Record ذیل نیز می ریزیم
وسپس با استفاده از Thread های ذخیره شده برای آنها ارسال می نمائیم
و این روش چنان پر سرعت است که هیچ خللی در کار بوجود نمی آید
موفق باشید :موفق:
MiRHaDi
چهارشنبه 21 بهمن 1383, 00:27 صبح
سلام
عزیزم از نظر ساختار پروتکل Tcp/ip باید بگم که اصلا امکان این وجود نداره که بدون اینکه بخوای پاکتی بفرستی به هر نفر اطلاعاتت بره ! فقط میتونی شما بفرستی به سرور و اون بفرسته به تک تک ! مثل وبکم تو یاهو یا ویس
بای
Touska
چهارشنبه 21 بهمن 1383, 15:22 عصر
آقای میرهادی من چنین منظوری هم نداشتم مشکل آقای Dadvand در ارسال آن هست
با سرعت بالا :flower:
پنج شنبه 29 بهمن 1383, 17:57 عصر
و این روش چنان پر سرعت است که هیچ خللی در کار بوجود نمی آید
سلام آقای touska از راهنمای شما متشکرم .
اگه میگی مشکلی پیش نمیاد من قبول میکنم .
حالا اگه مثلا ما یک فایل با حجم زیاد که نزدیک مثلا یک دقیقه یا بیشتر مدت انتقال اون طول بکشه و یک کلاینت دیگه نیز در بین همین درگیری سرور درخواست اون فایل رو بکنه و به همین صورت کلاینتهای دیگه آیا ممکنه مشکلی پیش بیاد و سرور قفل کنه ؟
آیا محض اطمینان بهتر نیست که سرور رو موظف کنم که هر بار یک فایل بفرسته تا در تبادل اطلاعاتی غیر از فایل بین کلاینتها و سرور که این اطلاعات مهم هستند خللی ایجاد نشود یا نه نیازی نیست .
باز هم touska یا بهتره بگم مصطفی جون تشکر :oops:
hps
پنج شنبه 29 بهمن 1383, 19:01 عصر
TCP/IP یه نوع پروتکل Peer2Peer و همزمانه بنابراین اگه مىخواى یه فایل رو براى همه بفرستى چارهاى جز راهحل Touska ندارى. براى کارى که مىخواى انجام بدى استفاده از UDP بهتر از TCP یه، که البته مسائل خاص خودش رو داره.
Touska
جمعه 30 بهمن 1383, 00:57 صبح
آقای Hps درست میگه :flower:
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.