# Native Code > برنامه نویسی در Delphi > توسعه نرم افزارهای تحت شبکه >  مسنجر تحت شبکه (UDP)

## Hamid_PaK

یه مسنجر که با پروتکل UDP کار میکنه(دوستان لطفا نظر بدین).

*توزیح تنظیمات:*

[Options]
Name=My Name
Port=8760
*LocalIpMask=192.168.0.**
; این گزینه برای بدست آوردن آیپی کنونی کامپیوتر شما استفاده خواهد شد
با این تنظیم برنامه تنها وقتی کار میکند که آیپی شما در میان 192.168.0.1 تا 192.168.0.255 باشد ;
از * برای ماسک کردن استفاده کنید
;*تنها کافیست که بر روی دکمه ? جلوی این مورد کلیک کرده و آیپی کنونی خود را از فهرست انتخاب کنید*
SavePartner=1
ShowMyself=0



نسخه 1.8 منتشر شد.
نسخه 1.9 منتشر شد.
نسخه 2.0 سازه 99 منتشر شد.
نسخه 2.0 سازه 100 منتشر شد.
*نسخه 2.1 سازه 9 منتشر شد.*

*تغییرات 1.9:*
تغییر نام Subnet Mask به Local IP Maskافزودن مراحل اتصال به Broadcastافزودن شکلکهای جدیدرفع تعدادی اشکالافزودن امکانات مختصر
-------------
*تغییرات 2.0 سازه 99:*
افزودن امکان ارتباط صوتی بین کاربرانرفع تعداد بسیاری خطاتغییرات و امکانات مختصر
-------------
*تغییرات 2.0 سازه 100:*
امکان انتخاب IP Local از فهرستتغییر الگوریتم Ping برنامهرفع تعداد اشکال و خطا
-------------
*تغییرات 2.1 سازه 9:*
افزودن شکل و شمایل نوشتاریتغییر الگوریتم Ping برنامهرفع تعداد اشکال و خطا

یا حق ...

----------


## dkhatibi

ببرنامه ی مسنجر در مثالهی INdy وجو دره از ائن کمک گرفینن؟

----------


## Hamid_PaK

ساختار کار دقیقا نمونه ای است که در سایت delphi.about.com ارائه شده است.

*لینک منبع*

یا حق ...

----------


## dkhatibi

به طور local نمی شه از اون استفاده کرد؟

----------


## Hamid_PaK

فرقی نمی کنه توی شبکه داخلی هم جواب می ده.

یا حق ...

----------


## Hamid_PaK

نسخه 1.8 به پست معرفی افزوده شد.

ویژگیها:
تغییر فهرست دوستان (کدنویسی با فلش)تغییر و تصحیح نمایش متون Trayافزودن فهرست شکلکهارفع چندین اشکال مختصر

لطفا نظر بدهید.

یا حق ...

----------


## mms_4004

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

----------


## Hamid_PaK

نوع پروتوکول این مسنجر ربطی به نوع ارتباطش با مودم نداره، تنها نیاز به شبکه داره، چه داخلی و چه اینترنت.

یا حق ...

----------


## HadiDelphi

ببخشید یه سوال بی مورد دارم
در مورد شبکه UDP میشه توضیح بدین ؟

----------


## Hamid_PaK

UDP شبکه نیست یه قرارداده مثل TCP.

لینک ویکیپیدیا

یا حق ...

----------


## aserfg

اين هم يه مسنجر ساده است كه با استفاده از پروتكل tcp كار مي كنه .

----------


## Hamid_PaK

یکی از بزرگترین مشکلاتی که من با پروتوکل TCP داشتم این بود که کلاینت برای دریافت اطلاعات از سرور باید در یک دور گردش مقادیر دریافتی را چک میکرد که این باعث تاخیر در برنامه می شد که به وضوح در این مثال دیده می شود.
سوال من درباره با این پروتوکل اینه که یاهو هم از TCP استفاده می کنه ولی چطور این مشکل حل شده ؟

با تشکر، یا حق ...

----------


## vcldeveloper

> یکی از بزرگترین مشکلاتی که من با پروتوکل TCP داشتم این بود که کلاینت برای دریافت اطلاعات از سرور باید در یک دور گردش مقادیر دریافتی را چک میکرد که این باعث تاخیر در برنامه می شد که به وضوح در این مثال دیده می شود.


من سورس شما را چک نکردم. از چی استفاده کردید، Indy؟ چرا نیاز به حلقه داشتید؟!!

----------


## aserfg

اصلا نيازي به حلقه و تكرار نيست چون در سمت كلاينت از يه memo استفاده كردم و مي خواستم كل خطوط ارسال بشه اين كار رو كردم شما تنها با نوشتن كد زير يه string رو مي تونين به سرور ارسال كنيد:
idtcpclient1.writeln(string)و همچنين براي خواندن از متد readln

----------


## Hamid_PaK

اصلا بحث ارسال نیست! مشکل برای دریافت اطلاعات است.
برنامه کلاینت را اجرا کنید می بینید که بعد از اتصال برای دریافت اطلاعات از سرور برنامه دچار تاخیر خواهد شد، این به دلیل اینه که کلاینت هر چند ثانیه برای دریافت اطلاعات دستورات Receive رو اجرا می کند.
و نکته دیگه اینکه توی پروتوکل UDP شما یه پیغام رو توی کل شبکه ارسال می کنید ولی من با TCP نتونستم.

یا حق ...

----------


## vcldeveloper

> برنامه کلاینت را اجرا کنید می بینید که بعد از اتصال برای دریافت اطلاعات از سرور برنامه دچار تاخیر خواهد شد، این به دلیل اینه که کلاینت هر چند ثانیه برای دریافت اطلاعات دستورات Receive رو اجرا می کند.


برنامه شما باید در سمت هر کلاینت یک IdTCPServer و یک IdTCPClient داشته باشه. 




> نکته دیگه اینکه توی پروتوکل UDP شما یه پیغام رو توی کل شبکه ارسال می کنید ولی من با TCP نتونستم.


بله، ولی خیلی از روترها این پیغام های Broadcast شده رو فیلتر می کنند.

----------


## Hamid_PaK

مسلم که باید هم سرور باشه و هم کلاینت، در UDP هم همینطور است.
پس برای یافتن کلاینتها در یک شبکه با TCP از چه راهی باید استفاده کرد ؟
و اینکه چرا اکثر آنتی ویروسها بسته های UDP رو مسدود می کنند؟

با تشکر، یا حق ...

----------


## vcldeveloper

> پس برای یافتن کلاینتها در یک شبکه با TCP از چه راهی باید استفاده کرد ؟


کلاینت برای استفاده از سرویس های ارائه شده توسط سرور باید به سرور لاگین کنه، نه اینکه سرور خودس دنبال کلاینت ها بگرده.




> چرا اکثر آنتی ویروسها بسته های UDP رو مسدود می کنند؟


من اطلاعی ندارم، اینو باید در بخش شبکه بپرسید.

----------


## Hamid_PaK

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

یا حق ...

----------


## vcldeveloper

کلاینت رو که جستجو نمی کنند. باید یک سرور مرکزی باشه که همه کلاینت ها آدرسش رو داشته باشند. وقتی کلاینتی می خواد به سیستم متصل بشه، به این سرور مرکزی لاگین میکنه. سرور هم مشخصات این کلاینت را ثبت میکنه، و به سایر کلاینت ها که در سرور لاگین کردند و مشخصاتشان در سرور ثبت شده، پیامی ارسال میکنه که فلان کلاینت لاگین کرده؛ یا لیست دوستان هر یک از کلاینت هایی که لاگین کردن را بررسی میکنه، اگر نام کلاینت جدید در آن بود، پیامی برای آن ارسال میکنه که فلانی لاگین کرده. زمانی که کلاینتی Log-off میکنه، اسمش از لیست کلاینت های موجود در سرور مرکزی حذف میشه. البته سرور باید حضور هر یک از کلاینت ها را ر فواصل زمانی معینی بررسی کنه، مثلا اگر کلاینتی ظرف 1 دقیقه داده ایی با سرور رد و بدل نکرد، سرور یک پیام برای آن بفرسته تا ببینه آیا کلاینت جواب میده یا نه، اگر نداد، یعنی کلاینت به شکل غیر منتظره ایی ارتباطش را از دست داده (مثلا برقش قطع شده) و باید اسمش از لیست کلاینت های موجود حذف بشه.

----------


## Hamid_PaK

تصور میکردم که سیستم یه چیزی شبیه این باشه یاهو هم از همین روش استفاده می کنه ولی مشکل ما اینه که ما توی یه شبکه ساده امکان برقرار کردن یه سرور رو نداریم که همچین چیزی رو بنویسیم!
آیا به نظر شما برای شبکه های کوچک همین روش UDP کارایی بالاتر داره ؟

یا حق ...

----------


## aserfg

اين پروتوكل (tcp)  معمولا در شبكه هاي بزرگ استفاده مي شه شايد مستلزم دقت و حساسيت بيشتري  باشه ولي به دلايلي از قبيل توانايي بازبيني بسته هاوكنترل خطا قابل اعتمادتر و قوي تر از پروتوكل udp است ضمنا در خيلي موارد udp وابسته به tcp است.

----------


## vcldeveloper

> توی یه شبکه ساده امکان برقرار کردن یه سرور رو نداریم که همچین چیزی رو بنویسیم!


سرورش چیزی خاصی نمی خواد. یک کامپیوتر معمولی هم کفایت میکنه، غیر از اینکه بگید ممکنه کامپیوتری که نقش سرور رو بازی میکنه، همیشه در دسترس نباشه. در اون صورت برنامه چت شما بدون یک سرور مرکزی، تبدیل میشه به یک نرم افزار Peer-to-Peer. در این حالت، دیگه لاگین کردن معنی نداره. میشه چند کار کرد:
1- هر فرد لیست آدرس های IP کاربرانی که در لیست دوستانش هستند را داشته باشه، و برنامه مرتبا اون آدرس ها را چک کنه تا ببینه آیا کاربر مربوطه آن لاین هست یا نه.
2- از همین UDP برای بررسی اینکه چه کاربرانی آن لاین هستند استفاده بشه؛ یعنی یک پیام Broadcast بشه، هر کی بهش جواب داد، آدرس IPاش در برنامه ثبت بشه.

اینها همه بستگی به وظیفه ایی که برعهده برنامه هست، داره.

----------


## Hamid_PaK

من این برنامه رو به تعدادی از دوستانم دادم ولی اکثر اونها با مشکل مواجه شدند و دلیل آن هم مسدود شدن بسته های Broadcast بوده.
خواهش می کنم که دوستانی که این برنامه رو استفاده می کنند در همین تاپیک نتیجه را بنویسند که در کدامیک از بخشهای اتصال درچار مشکل شدند و یا برنامه کار می کند.
فقط دوستان دقت کنند که هنگامی که برنامه برای اولین بار اجرا می شود بعد از تنظیمات دسترسی مربوط به Firewall و یا برنامه های از این دست بدون بستن آن تنها از منوی Messenger گزینه Connect رو بزنند.

با تشکر فراوان، یا حق ...

----------


## Hamid_PaK

نسخه 2.0 به پست معرفی افزوده شد.
منتظر نظراتتون هستم.
حاج علی حتما چک کن، منتظرم.

با تشکر، یا حق ...

----------


## Hamid_PaK

نسخه 2.0 سازه 100 به پست معرفی (ابتدایی) افزودن شده.
دوستان بعد از حدود 60 بار دانلود حداقل میگفتید که آیا برنامه درست کار می کنه یا خیر !!!

با تشکر، یا حق ...

----------


## Hamid_PaK

نسخه 2.1 سازه 9 به پست معرفی افزوده شد.
دوستان خواهشمندم در صورت مواجه شدن با هرگونه اشکال و یا خطایی، مورد را به بنده اطلاع دهند.

با تشکر، یا حق ...

----------


## plascokar

باتشکر از شما.
بله برنامه به درستی کار میکنه.

----------

