تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




صفحه 1 از 2 12 آخرآخر
نمايش نتايج 1 به 10 از 14

نام تاپيک: IdTCPServer

  1. #1
    اگه نباشه جاش خالی می مونه MAR_Programmer's Avatar
    تاريخ عضويت
    Feb 2006
    محل سكونت
    Ubuntu Desktop
    پست ها
    253

    9 IdTCPServer

    سلام
    می خواستم ببینم این کامپوننت متدی، چیزی داره که از طریق اون بشه تعداد Client های متصل به اونو فهمید یا نه!
    اگه راهی هست راهی هم وجود داره که از طریق اون برای همه Client های فعلی یه پیام عمومی بفرستیم یا نه؟؟
    مورد دوم مهمتره اگه کامپوننت دیگه ای هست که این کار رو میکنه لطفا معرفی کنید (خیلی پیچیده نباشه و در ضمن جزء کامپوننت های پیش فرض باشه آخه راحتره)

    از توجهتون خیییییییییییییلی ممممممنونم

  2. #2
    اگه نباشه جاش خالی می مونه MAR_Programmer's Avatar
    تاريخ عضويت
    Feb 2006
    محل سكونت
    Ubuntu Desktop
    پست ها
    253

    6 یه سوال دیگه

    اگه یه COM+ Service داشته باشیم چه جوری یه Client میتونه به اون از طریق Server دسترسی داشته باشه؟
    منظورم اینه که توی عبارت زیر به جای MachineName جی باید گذاشت، IP آدرس ماشین رو یا اسم ماشینو
    Coaaa.CreateRemote(const MachineName: string
    من هردو تاشو امتحان کردم کار نمی کنه البته در مورد نام ماشین یکم شک دارم
    بازم ممنون

  3. #3
    داره خودمونی میشه
    تاريخ عضويت
    Feb 2008
    پست ها
    161

    پيش فرض

    می خواستم ببینم این کامپوننت متدی، چیزی داره که از طریق اون بشه تعداد Client های متصل به اونو فهمید یا نه!
    اگه راهی هست راهی هم وجود داره که از طریق اون برای همه Client های فعلی یه پیام عمومی بفرستیم یا نه؟؟
    به ازاء هر کلاینتی که به سرور وصل میشه، Indy یک Thread در سمت سرور میسازه که این Thread در هنگام اتصال در دسترس شما قرار داره و در داخل خودش مشخصات کلاینت رو نگه داری میکنه. می تونید در زمان اتصال کلاینت ها اشاره گری به Thread هر کلاینت را در لیستی نگه داری کنید، به این ترتیب، هم تعداد کلاینت ها رو می تونید از روی تعداد Item های لیست بفهمید، هم می تونید با استفاده از Thread مربوطه آدرس هر یک از کلاینت ها را بدست بیارید، و براشون، پیام ارسال کنید. البته در Indy کامپوننت های سرور فقط امکان پاسخ به کلاینت را دارند و نمی تونند خودشون شروع کننده ارتباط باشند. برای شروع یک ارتباط می تونید در سمت کلاینت خودتون هم یک سرور داشته باشید.

  4. #4
    اگه نباشه جاش خالی می مونه MAR_Programmer's Avatar
    تاريخ عضويت
    Feb 2006
    محل سكونت
    Ubuntu Desktop
    پست ها
    253

    پيش فرض توضیح بیشتر

    به ازاء هر کلاینتی که به سرور وصل میشه، Indy یک Thread در سمت سرور میسازه که این Thread در هنگام اتصال در دسترس شما قرار داره و در داخل خودش مشخصات کلاینت رو نگه داری میکنه. می تونید در زمان اتصال کلاینت ها اشاره گری به Thread هر کلاینت را در لیستی نگه داری کنید، به این ترتیب، هم تعداد کلاینت ها رو می تونید از روی تعداد Item های لیست بفهمید، هم می تونید با استفاده از Thread مربوطه آدرس هر یک از کلاینت ها را بدست بیارید، و براشون، پیام ارسال کنید. البته در Indy کامپوننت های سرور فقط امکان پاسخ به کلاینت را دارند و نمی تونند خودشون شروع کننده ارتباط باشند. برای شروع یک ارتباط می تونید در سمت کلاینت خودتون هم یک سرور داشته باشید.
    ممکنه یک مثال بزنی مثلا تعداد Thread های موجود در Server رو مشخص کنه و به Thread ای که مثلا دارای IP ادرس 192.168.106.20 یه پیام بفرسته.
    اگر خاصیت مربوطه رو میگفتی بهتر بود چون خودم من از Thread ها استفاده کردم نشد - یعنی گیج شدم - اما اگه مثالی هم نداری خاصیت، متد، ویژگی مربوطه رو هم بگی خیلی عالیه.
    از توجهت ممنونم

  5. #5
    داره خودمونی میشه
    تاريخ عضويت
    Feb 2008
    پست ها
    161

    پيش فرض

    رویداد OnConnect مربوط به IdTCPServer را نگاه کن و به پارامتری که داره دقت کن.

    موفق باشی

  6. #6
    اگه نباشه جاش خالی می مونه MAR_Programmer's Avatar
    تاريخ عضويت
    Feb 2006
    محل سكونت
    Ubuntu Desktop
    پست ها
    253

    پيش فرض خسته نباشید

    رویداد OnConnect مربوط به IdTCPServer را نگاه کن و به پارامتری که داره دقت کن.

    موفق باشی
    عزیز من دوتا تایپیک بالا تر گفتم که من از Thread استفاده کردم اما نمی دونم از کدوم یکی از پارامترهای اون (متد، خاصیت ها) باید استفاده کنم اگه ممکنه یکم واضح تر بگو

  7. #7
    اگه نباشه جاش خالی می مونه MAR_Programmer's Avatar
    تاريخ عضويت
    Feb 2006
    محل سكونت
    Ubuntu Desktop
    پست ها
    253

    13 یک نکته دیگر

    یه چیز دیگه که یادم رفت بگم
    مشکلم اینه که وقتی می خوام یه پیام عمومی بفرستم نمی دونم ( یعنی یه راه ساده می خوام) چه کار باید بکنم
    تو همون رویدادی که گفتی من با یه StringList تمام IP هایی رو که متصل شدن رو ذخیره می کنم اما حالا چه جوری باید به کلاینت هایی که IP اونا رو ذخیره کردم یه پیام عمومی بفرستم با استفاده از Id..Server
    یه راهش اینه که برای هر کلاینت کامپوننت Id..Server رو بزارم و برای سرور هم Id..Client بعد اینارو یکی یکی مقدار دهی کنم (خیلی سخته و طولانی میشه یه جورایی هم بهینه نیست) حالا اگه راه دیگه ای به نظرت میرسه خوشحال میشم که بگی.
    بازهم از توجهت ممنون



  8. #8
    پروفشنال romixery's Avatar
    تاريخ عضويت
    Mar 2007
    محل سكونت
    ميون موجودات عجيب غريب(آدما)
    پست ها
    673

    پيش فرض

    دوست عزيز يه راه ديگه هم براي پيغام فرستادن هست. استفاده از كامپوننتهاي TClientScket و TServersocket هست. من با اين دو كامپوننت كار كاردم و به راحتي مي توني يه پيغام متني رو بفرستي. البته اين كامپوننتها به طور پيش فرض در دلفي 7 به بعد حذف شده اند چون Indy اومده بود. ولي اگه بخواي مي توني دستي وارد كني.
    براي وارد كردنش هم مراحل زير رو برو:
    Commponent>Install Pakages>Add
    حالا فلد Bin دلفي را باز كن و فايل dclsockets70 را وارد ليست كامپوننتهات بكن. در Tab اينترنت نگاهي بكن. اومدن اونجا. توي delphi.about مراحل كامل ساخت برنامه اي كه ميخواي رو با اين دو كامپوننت گفته.
    اينم صفحش:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    موفق باشي

  9. #9
    اگه نباشه جاش خالی می مونه MAR_Programmer's Avatar
    تاريخ عضويت
    Feb 2006
    محل سكونت
    Ubuntu Desktop
    پست ها
    253

    پيش فرض تکرار

    سلام
    خیلی ممنون
    Last edited by MAR_Programmer; 10-05-2008 at 09:39. دليل: اشتباه شد

  10. #10
    داره خودمونی میشه
    تاريخ عضويت
    Feb 2008
    پست ها
    161

    پيش فرض

    عزیز من دوتا تایپیک بالا تر گفتم که من از Thread استفاده کردم اما نمی دونم از کدوم یکی از پارامترهای اون (متد، خاصیت ها) باید استفاده کنم اگه ممکنه یکم واضح تر بگو
    اون رویداد همش یک پارامتر بیشتر نداره!! دیگه من چی رو توضیح بدم؟!
    تو همون رویدادی که گفتی من با یه StringList تمام IP هایی رو که متصل شدن رو ذخیره می کنم اما حالا چه جوری باید به کلاینت هایی که IP اونا رو ذخیره کردم یه پیام عمومی بفرستم با استفاده از Id..Server
    یه راهش اینه که برای هر کلاینت کامپوننت Id..Server رو بزارم و برای سرور هم Id..Client بعد اینارو یکی یکی مقدار دهی کنم (خیلی سخته و طولانی میشه یه جورایی هم بهینه نیست) حالا اگه راه دیگه ای به نظرت میرسه خوشحال میشم که بگی.
    از کجا فهمیدید که بهینه نیست؟! مکانیزم Indy با مکانیزم کنترل های دیگه فرق میکنه. Server شما فقط میتونه به درخواست های کلاینت ها پاسخ بده. اگر خودش بدون اینکه کلاینتی ازش چیزی خواسته باشه، بخواد به یک کلاینت پیامی بفرسته، این دیگه سرور نیست، بلکه خودش کلاینت هست! پس برای همچین اموری باید از IdTcpClient استفاده کرد و از IdTcpServer فقط برای امور مربوط به سرور. این روش غیربهینه ایی نیست، اتفاقا درست هم هست، اما چون بهش عادت ندارید، فکر می کنید که همونی که بهش عادت دارید درست هست!

صفحه 1 از 2 12 آخرآخر

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •