# Native Code > برنامه نویسی در Delphi > توسعه نرم افزارهای تحت شبکه >  ساخت یک برنامه چت ساده

## farzane_fn

دوستای گلم سلام. من دانشجوی ترم پنجم کارشناسی کامپیوتر هستم. استادمون یه پروژه بهمون گفته که نرم افزار چت رو طراحی کنیم به این صورت که یه فرم با یه ادیت و یه باتون و یه لیبل بعد این برنامه رو دوبار اجرا می کنیم بعد از توی یک برنامه یه متنی تو ادیتش می نویسیم دکمه رو که بزنیم توی لیبل برنامه دیگه متنه نمایش داده بشه و از توی اون برنامه هم که توی ادیتش یه چیزی رو بنویسیم دکمه رو که بزنیم توی لیبل برنامه دیگه نوشته بشه. اگه هر دو برنامه اجرا شده روی یک کامپیوتر اجرا بشن و در شبکه نباشه هم استاد قبول می کنه. اگه ممکنه راهنمایی کنین.من اصلا نمی دونم چی باید بنویسم. فقط می دونم شماره پورت دو برنامه رو باید داشته باشم.لطفا راهنمایی کنین.. خواهر کوچیکتون فرزانه..
-----------------------------------------------------------------------------------
توضیح:من خودم برنامه نویسم و نمی خوام این برنامه رو برام بنویسید بلکه درخواست راهنمایی دارم. فقط راهنمایی کنین ایشالا خودم برنامه رو می نویسم.

----------


## Mahmood_M

حتما باید با ابزارهای شبکه باشه ؟
اگه اینطور هست که Indy رو در سایت جستجو کنید ، در موردش هم بحث شده و هم برنامه های نمونه وجود داره ...
اگر هم حتما نباید از ابزارهای شبکه استفاده بشه ، می تونید از روش ارسال و دریافت پیغام استفاده کنید ، هم در سایت بحث شده و هم برنامه نمونه خودم گذاشتم و هم یک مقاله و نمونه در اینجا قرار داره ...

یک نکته ی دیگه : بنده مدیر نیستم و حق دخالت در کار مدیران رو هم ندارم ، اما پیشنهاد میکنم برای پستتون عنوان بهتری انتخاب کنید تا امکان پاک شدنش از بین بره و هم دوستان مطمئن تر قدم در این تاپیک گذارند ! ...

موفق باشید ...

----------


## p_ooya

سلام.
شما باید یه برنامه سوکت بنویسی. تو دلفی دو تا کامپوننت هست به اسم های :
TServerSocket and TClientSocket
از بابت اسم اطمینان ندارم چون توی لینوکسم و دلفی ندارم اما باید یه همچین چیزی باشه. خیلی ساده است. این کامپوننت ها در یه حلقه بی نهایت یه پورت خاص رو مونیتور می کنند و اگر پیامی برسه٬‌بسته به این که کد شما چی باشه تحلیلش می کنند. حقیقتش یه توضیح مفصل داده بودم بعد که اومدم جواب بدم دیدم تاپیک رو پاک کردی (کار خوبی نیست. کسی که جواب میده انتظاری نداره و این کار رو به عنوان knowledge sharing انجام میده اما با حذف تاپیک کارش بی ارزش میشه) و این بار دوم بود که جواب شما به خاطر حذف تاپیک پرید (دومیش راجع به messagebox) . به هر حال خبر خوب اینه که توی دموهای دلفی یه چت روم هست و میتونی ایده بگیری. اگه مشکلی بود بگو. 

پ.ن: دلفی انتخاب خوبی برای برنامه سوکت نیست.

----------


## Felony

> پ.ن: دلفی انتخاب خوبی برای برنامه سوکت نیست.


 :متفکر: میشه بگید این یکی رو کی گفته ؟ جدیدا انگشت همه به سمت دلفی هدف گرفته میشه و پای هرچی وسط میاد میگن دلفی تو اون زمینه خوب نیست !!!

دوست عزیز Indy که همراه دلفی عرضه میشه یکی از بهترین سری ابزارهای برنامه نویسی سوکت هست ...

----------


## farzane_fn

> سلام.
> شما باید یه برنامه سوکت بنویسی. تو دلفی دو تا کامپوننت هست به اسم های :
> TServerSocket and TClientSocket
> از بابت اسم اطمینان ندارم چون توی لینوکسم و دلفی ندارم اما باید یه همچین چیزی باشه. خیلی ساده است. این کامپوننت ها در یه حلقه بی نهایت یه پورت خاص رو مونیتور می کنند و اگر پیامی برسه٬‌بسته به این که کد شما چی باشه تحلیلش می کنند. حقیقتش یه توضیح مفصل داده بودم بعد که اومدم جواب بدم دیدم تاپیک رو پاک کردی (کار خوبی نیست. کسی که جواب میده انتظاری نداره و این کار رو به عنوان knowledge sharing انجام میده اما با حذف تاپیک کارش بی ارزش میشه) و این بار دوم بود که جواب شما به خاطر حذف تاپیک پرید (دومیش راجع به messagebox) . به هر حال خبر خوب اینه که توی دموهای دلفی یه چت روم هست و میتونی ایده بگیری. اگه مشکلی بود بگو. 
> 
> پ.ن: دلفی انتخاب خوبی برای برنامه سوکت نیست.


دوست خوبم سلام.در مورد اعتراضی که داشتید من به شما حق می دم و از شما پوزش می طلبم.امیدوارم از من دلخور نشده باشید..

پ.ن: دلفی انتخاب خوبی برای برنامه سوکت نیست.

اگه ممکنه یه توضیح مختصر در مورد اینکه دلفی انتخاب خوبی برای برنامه سوکت نیست بدین. متشکرم

----------


## young_man1365

این لینکها میتونه کمکتون کنه:
https://barnamenevis.org/showthread.php?t=88624

http://www.barnamenevis.org/sh...ad.php?t=52037

https://barnamenevis.org/showthread.php?t=9385

https://barnamenevis.org/showthread.php?t=39215

من با حرف دوستمون که فرموده بودند دلفی برای سوکت مناسب نیست مخالفم. دلیلش هم انعطاف بالای دلفی برای کار با کامپوننت های سوکته. اگه  استفاده کنید مطمئنا" خودتون هم به این نتیجه میرسید.

----------


## farzane_fn

> یک نکته ی دیگه : بنده مدیر نیستم و حق دخالت در کار مدیران رو هم ندارم ، اما پیشنهاد میکنم برای پستتون عنوان بهتری انتخاب کنید تا امکان پاک شدنش از بین بره و هم دوستان مطمئن تر قدم در این تاپیک گذارند ! ...


دوست خوبم من بعد از ایجاد تاپیک قصد داشتم عنوان اون رو تغییر بدم اما موفق نشدم.از تذکر شما متشکرم..

----------


## vcldeveloper

> پ.ن: دلفی انتخاب خوبی برای برنامه سوکت نیست.


می بخشید، حرف بی اساسی هست؛ برنامه نویس دلفی اگر مایل باشه، میتونه مثل برنامه نویس C یا ++C مستقیما از توابع WinSock ویندوز برای کار با سوکت استفاده کنه، یا اگر نمیخواد خودش را درگیر کار با WinSock کنه، میتونه از کتابخانه های رایگان و غیر رایگانی مثل Indy استفاده کنه.



> شما باید یه برنامه سوکت بنویسی. تو دلفی دو تا کامپوننت هست به اسم های :
> TServerSocket and TClientSocket


این دو کامپوننت در دلفی منسوخ شدند و مربوط به دلفی 6 و نسخه های قبل از آن هستند، و مشکلات زیادی دارند. از دلفی 7 به بعد، این کامپوننت ها با کامپوننت های Indy جایگزین شدند.




> دوست خوبم من بعد از ایجاد تاپیک قصد داشتم عنوان اون رو تغییر بدم اما موفق نشدم.


عنوان تاپیک اصلاح شد. در ضمن، این تاپیک باید در زیر گروه نرم افزارهای تحت شبکه دلفی ایجاد می شد، نه مباحث عمومی دلفی.

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

----------


## MohsenTi

ببخشد ها احتمالا من بلد نیستم از Indy استفاده کنم ولی تا اوجایی که باهاش کارکردم بعد از 10 تا برنامه تحت شبکه مجبور شدم برای شرکتم یه کامپونت بر اساس WinSock بنویسم البته Indy هم بر اساس WinSock است ولی خیلی قرو قاتیه

----------


## p_ooya

> میشه بگید این یکی رو کی گفته ؟ جدیدا انگشت همه به سمت دلفی هدف گرفته میشه و پای هرچی وسط میاد میگن دلفی تو اون زمینه خوب نیست !!!





> اگه ممکنه یه توضیح مختصر در مورد اینکه دلفی انتخاب خوبی برای برنامه سوکت نیست بدین. متشکرم





> می بخشید، حرف بی اساسی هست؛


مثل اینکه من نباید توی تالار دلفی این حرف رو می زدم. من خودم سالهاست دارم با دلفی برنامه می نویسم و اصلاً قصد ندارم انگشت اتهام به سمت دلفی بگیرم. قبول دارم که بهتر بود در اون جمله می نوشتم "به نظر من...". مسئله اینه که من یه برنامه رو با دلفی نوشتم و بعد هم با جاوا عین همون کار رو انجام دادم. اگه به کسی بر نمی خوره باید بگم جاوا از جهاتی بهتر بود. نتیجه یکی بود(؟) ولی برنامه نویسی با جاوا باعث شد من درک درستی نسبت به سوکت پیدا کنم. مثلاً مادامی که من با دلفی کار می کردم نفهمیدم که این سرور از کجا می فهمه پیامی رسیده و ...



> این دو کامپوننت در دلفی منسوخ شدند و مربوط به دلفی 6 و نسخه های قبل از آن هستند، و مشکلات زیادی دارند. از دلفی 7 به بعد، این کامپوننت ها با کامپوننت های Indy جایگزین شدند.


بله من در همون پست اول هم گفتم که الان دلفی ندارم و مطمئن نیستم. اما *فکر کنم* tcpclient/server کار مشابهی رو توی دلفی 7 انجام میدن. (آیا؟)
دوستان، شما پیش کسوت من هستید و من رو روشن کنید. برای این پروژه در این سطح بهتره از tcpclient یا حتی TClientSocket (منسوخ) استفاده بشه یا indy؟

----------


## vcldeveloper

> ببخشد ها احتمالا من بلد نیستم از Indy استفاده کنم ولی تا اوجایی که باهاش کارکردم بعد از 10 تا برنامه تحت شبکه مجبور شدم برای شرکتم یه کامپونت بر اساس WinSock بنویسم البته Indy هم بر اساس WinSock است ولی خیلی قرو قاتیه


شرکت توسعه دهنده دلفی DataSnap را براساس Indy نوشته، RemObjects هم به عنوان یکی از شرکت های بسیار مطرح در تولید کامپوننت های تولید نرم افزارهای چند لایه در دلفی و دات نت، RemObjects SDK را بر روی Indy ساخته، و خیلی راحت میتونه پاسخگوی تعداد زیادی کلاینت باشه، حداقل من خودم RemObjects SDK رو تست کردم. آشنا نبودن شما با مفاهیم کار با یک ابزار نشانه قاطی بودن آن ابزار نیست!

اگر چند مقاله درباره Indy مطالعه می کردید، متوجه می شدید که Indy رویکردی متفاوت از WinSock برای برنامه نویسی سوکت ارائه میکنه؛ Indy بصورت Blocking و WinSock بصورت Non-blocking عمل میکنه.




> اگه به کسی بر نمی خوره باید بگم جاوا از جهاتی بهتر بود. نتیجه یکی بود(؟) ولی برنامه نویسی با جاوا باعث شد من درک درستی نسبت به سوکت پیدا کنم. مثلاً مادامی که من با دلفی کار می کردم نفهمیدم که این سرور از کجا می فهمه پیامی رسیده و ...


خب این هم دلیلی مبنی بر ضعف اون کتابخانه محسوب نمیشه؛ من هم از Syntax زبان C خوشم نمیاد، و خواند کد آن برای من ملال آور هست، ولی این دلیل نمیشه که بگیم C بدرد نمیخوره!

شما با مفهومی آشنایی نداشتید، خواستید برای آن برنامه بنویسید، در دلفی موفق نبودید، در جاوا متوجه شدید که اون مفهوم را بهتر متوجه میشید، این چه ربطی به مناسب بودن یا نبودن دلفی برای کار با سوکت داره؟! نرم افزار شما که بیشتر از Skype با سوکت سر و کار نداشت، داشت؟ نسخه تحت ویندوز Skype هم با استفاده از دلفی نوشته شده، و می بینید که خیلی هم خوب با سوکت و شبکه کار میکنه.



> اما *فکر کنم* tcpclient/server کار مشابهی رو توی دلفی 7 انجام میدن. (آیا؟)


این دو کامپوننت در دلفی 7 موجود هستند، ولی بطور پیش فرض نصب نیستد. فقط برای Backward Compatibility در دلفی 7 وجود دارند.


دوستان دقت کنید که، یک مطلبی بگید که بار فنی داشته باشه، مثلا بگید در فلان مقوله برنامه نویسی تحت شبکه، به این دلایل Indy یا دلفی ضعیف تر از X هستند، یا فلان مورد در Indy باگ داره، ولی در Y نداره؛ نه اینکه Indy قاطی هست، فلان کتابخانه خوب هست (بدون دلیل)، یا من فلان مفهوم را با جاوا فهمیدم، پس Indy مناسب نیست!!

----------


## AbiriAmir

ببخشید که تو کار اساتید دخالت میکنم ولی پیشنهاد میکنم اگه ایشون مایل به یادگیری برنامه نویسی سوکت هستن که بحثش جداست ولی اگه نیستن و اگه استادشوت تو یه کامپیوتر هم قبول میکنه بهتره که ایشون رو سردرگم نکنیم
چون در این صورت کارشون با یه ارسال پیغام حل میشه که سرجمع شاید برنامه نویسیشون 20 خط هم نشه...
البته همون جوری که استاد گرام جناب Mahmood_N گفتن...

----------


## amin1368

سلام من امين ترم چهار كامپيوتر هستم برنامه شمارو در ترم 1 با Winsock ويژوال بيسيك نوشتم كه راحت هم هست اما درس پروژه اين ترمم از من يك برنامه چت همراه با ارسال صدا و تصوير تحت شبكه خواسته كه مشكله اگه چيزي به نظر شما رسيد لطفاً به من هم بگين ممنون
amin1368a@gmail.com

----------


## irlogo

من قبلا یه همجین پروژه ای داشتم، خیلی راحت بود

----------


## دلفــي

> دوستای گلم سلام. من دانشجوی ترم پنجم کارشناسی کامپیوتر هستم. استادمون یه پروژه بهمون گفته که نرم افزار چت رو طراحی کنیم به این صورت که یه فرم با یه ادیت و یه باتون و یه لیبل بعد این برنامه رو دوبار اجرا می کنیم بعد از توی یک برنامه یه متنی تو ادیتش می نویسیم دکمه رو که بزنیم توی لیبل برنامه دیگه متنه نمایش داده بشه و از توی اون برنامه هم که توی ادیتش یه چیزی رو بنویسیم دکمه رو که بزنیم توی لیبل برنامه دیگه نوشته بشه. اگه هر دو برنامه اجرا شده روی یک کامپیوتر اجرا بشن و در شبکه نباشه هم استاد قبول می کنه. اگه ممکنه راهنمایی کنین.من اصلا نمی دونم چی باید بنویسم. فقط می دونم شماره پورت دو برنامه رو باید داشته باشم.لطفا راهنمایی کنین.. خواهر کوچیکتون فرزانه..
> -----------------------------------------------------------------------------------
> توضیح:من خودم برنامه نویسم و نمی خوام این برنامه رو برام بنویسید بلکه درخواست راهنمایی دارم. فقط راهنمایی کنین ایشالا خودم برنامه رو می نویسم.


شما می تونید از مثال خود دلفی استفاده کنید که خیلی جامع تر از اون چیزیه که شما خواستید .
به مسیر نصب دلفی رجوع کنید :
C:\Program Files\Borland\Delphi7\Demos\Internet\NetChat

----------


## jamshid2008

> مثل اینکه من نباید توی تالار دلفی این حرف رو می زدم. من خودم سالهاست دارم با دلفی برنامه می نویسم و اصلاً قصد ندارم انگشت اتهام به سمت دلفی بگیرم. قبول دارم که بهتر بود در اون جمله می نوشتم "به نظر من...". مسئله اینه که من یه برنامه رو با دلفی نوشتم و بعد هم با جاوا عین همون کار رو انجام دادم. اگه به کسی بر نمی خوره باید بگم جاوا از جهاتی بهتر بود. نتیجه یکی بود(؟) ولی برنامه نویسی با جاوا باعث شد من درک درستی نسبت به سوکت پیدا کنم. مثلاً مادامی که من با دلفی کار می کردم نفهمیدم که این سرور از کجا می فهمه پیامی رسیده و ...
> 
> بله من در همون پست اول هم گفتم که الان دلفی ندارم و مطمئن نیستم. اما *فکر کنم* tcpclient/server کار مشابهی رو توی دلفی 7 انجام میدن. (آیا؟)
> دوستان، شما پیش کسوت من هستید و من رو روشن کنید. برای این پروژه در این سطح بهتره از tcpclient یا حتی TClientSocket (منسوخ) استفاده بشه یا indy؟


در پاسخ به کسانی که در باره قوت و ضعف زبانهای برنامه نویسی همانند دلفی صحبت می کنند باید عرض کنم که هیچ زبان برنامه نویسی عاری از ضعف نیست. به همین دلیل است که زبانهای برنامه نویسی از زبانهای سطح پایین به زبانهای سطح بالا دسته بندی می شوند. آنچه که مهم است درک درست برنامه نویس از پروژه ایست که باید برای آن یک برنامه تهیه کند. برنامه های کاربردی همچون چت ، از نوع برنامه های سرویس دهنده/سرویس گیرنده هستند که به خودی خود به پروتکلهای شبکه مرتبط می شوند و همانطور که می دانید سرآمد همه این پروتکل ها TCP/IP  است که به زبان C نوشته شده است. در دنیای برنامه نویسی نوشتن هر برنامه ای با هر زبان برنامه نویسی امکان پذیر است. زبان دلفی با دراختیار گذاشتن کامپوننت های فراوان ، کاربران خود را از نوشتن کدهای بیشتر بی نیاز می سازد و همین امر شاید سبب کاهل شدن برنامه نویسان جهت رفع موانع برنامه نویسی می گردد.
در پایان باید عرض کنم بهتر است قبل از نوشتن برنامه های مرتبط با شبکه حتماً در مورد پروتکل معروف TCP/IP  مطالعه عمیق صورت گیرد که در این حالت شما حتی با زبان فاکس پرو هم قادر به نوشتن برنامه هایی نظیر چت خواهید شد.

----------

