PDA

View Full Version : ارسال پيام بين كلاينت و سرور بدون Broadcast



diamond_guilan
سه شنبه 12 دی 1391, 16:45 عصر
سلام و خسته نباشيد خدمت همه...
يه قسمتي از برنامه اي كه قراره بنويسم، بايد بين كلانيت و سرورها يه پيامي رد و بدل بشه(كلاينت به كلاينت هم بايد بتونه) اما نميخوام از طريق برودكست اين عمل صورت بگيره(مدير بخشمون گفته كه نباد از طريق برودكست باشه) به هر حال ممنون ميشم نظرات و راهنمايهاتونو بگيد...
.: ممنون :.

Mask
سه شنبه 12 دی 1391, 17:05 عصر
الان دقیقا مشکل کجاست؟

diamond_guilan
سه شنبه 12 دی 1391, 17:09 عصر
اگه امكانش هست يه نمونه سورس
يا راهنمايي، اينكه از چه كامپوننتي استفاده كنم؟
IDtcpclient , IDtcpserver هم برود كست ميكنن؟

mohsen24000
سه شنبه 12 دی 1391, 17:21 عصر
TIdUDPServer دارای BroadCast هم هست.
UDPServer.Broadcast('chat',3333,'192.168.1.3',TUni codeEncoding.Create);

با سوکت TClientSocket و TServerSocket می تونید...

CSocket.socket.SendText('');

diamond_guilan
سه شنبه 12 دی 1391, 17:31 عصر
mohsen24000 عزيز؛ udpها كلا با برودكست كردن اين كارو انجام ميدن، مشكل اينجاس كه "نبايد" با برودكست اين كار انجام بشه

Mask
سه شنبه 12 دی 1391, 19:18 عصر
شما باید از پروتکل tcp استفاده کنید.

diamond_guilan
چهارشنبه 13 دی 1391, 07:58 صبح
ممنون جناب GOLD؛
براي اينكه كلاينتها هم بتونن به هم پيام بدن، بايد واسه هر كلاينت هم يه IDtcpServer بزارم؟
يه نچيز ديگه، اگه Admin سيستم چندتا كاربر رو انتخاب كرد كه واسشون پيام بده، اون موقع چيكار كنم؟ تست نكردم رو چندتا سيستم، پيام واسه كلاينتهاي انتخاب شده ميره؟ يا واسه همه كلاينتها ميره؟

Felony
چهارشنبه 13 دی 1391, 08:08 صبح
من کل تاپیک رو خوندم ، مشکل کجاست ؟! باید سناریویی مثل زیر پیاده کنید :

هر کلاینت با باز کردن برنامش یه پیغام ( مثلا "I'mOnline" ) در شبکه Broadcast میکنه و خودش رو با این کار معرفی میکنه ، با دریافت این پیغام در برنامه ، آدرس IP سیستمی که این پیغام رو ارسال کرده در یک لیست ذخیره میکنید ، هر بار هم که این پیغام اومد اون لیست رو به روز میکنید ، با این کار همه سیستم های کلاینت IP همدیگرو دارن ، حالا خیلی راحت میتونید تو یک حلقه به IP های مورد نظر پیغام مورد نظر رو بدون Broadcast کردن ارسال کنید .

diamond_guilan
چهارشنبه 13 دی 1391, 08:58 صبح
ممنون جناب تاجبك،
يه خورده برنامه مربوط به اين قسمت رو كامل تر توضيح ميدم.
برنامه تو استارتاپه و اين قسمت كه دارم توضيح ميدم بخشي از اون برنامه س... هر بار سيستم روشن شه برنامه بوت ميشه... پس هميشه همه هستن تو شبكه (يعني بايد باشن)
تو جدولي كه يوزرهارو تعريف ميكنم تو اونجا IP هر كاربر رو هم دادم، يعني هر كاربر IPش در دسترسه (اين برنامه فقط تو شركت خودمون قراره اجرا شه، همه سيستم ها و كاربرا و IPهاشون در دسترسه) پس مشكلي با بدست آوردن IP كابرا ندارم.
وقتي Admin سيستم خواست به يكي يا همه پيام بده، از ليست، كاربرا رو تيك ميزنه و يه پيامي رو به اونايي كه انتخاب كرده ميده ...
"به گفته مديرمون، اصلا و اصلا نبايد برودكست بشه"
كلاينت ها هم بايد بتونن واسه هم پيام رد و بدل كنن(اونا هم از ليست يه نفر يا چند نفر رو انتخاب مبكنن و ...)
اميدوارم تونسته باشم واضح مطرح كنم
تو اين زمينه راهنماييم ميكنين. ممنون از لطفتونن

Felony
چهارشنبه 13 دی 1391, 09:27 صبح
هر بار سيستم روشن شه برنامه بوت ميشه...
"بوت " واژه صحیحی برای این مورد نیست ، Boot میشن یعنی برنامه شما یا یک Boot Loader مخصوص برنامه شما در MBR قرار داره که اینطور نیست ...

خوب با اون تفاسیر مشکل کجاست ؟ تو یک حلقه به IP های انتخاب شده توسط TCP پیغام رو ارسال کنید .

diamond_guilan
چهارشنبه 13 دی 1391, 10:02 صبح
ممنون از نكته تون، بايد ميگفتم Run ميشه.
تا اونجايي كه من متوجه شدم، هر tcpserver و tcpclient به يه ip متصل هستن. يعني اگه چندتا كاربر انتخاب شد به ازاي تعداد اونا tcpclidnt بسازم؟
يا اينكه به تعداد اونا كانكت و ديسكانكت كنم؟
مشكل من اينجاس

Mask
یک شنبه 17 دی 1391, 15:22 عصر
تا اونجايي كه من متوجه شدم، هر tcpserver و tcpclient به يه ip متصل هستن. يعني اگه چندتا كاربر انتخاب شد به ازاي تعداد اونا tcpclidnt بسازم؟
نخیر. شما باید آی پی رو هی تغییر بدید نه یه کنترل tcpclient داشته باشید.