# Native Code > برنامه نویسی در Delphi > توسعه نرم افزارهای تحت شبکه > سوال: بهترين ابزار انتقال فايل در شبكه چيست؟

## alinikaein

با سلام؛

مي‌خواستم ببينم براي انتقال فايل بين يك سرور در شبكه‌ي محلي و كلاينت‌هاي شبكه، بهترين ابزار و گزينه چيه؟

در صورتي كه بخوايم اين انتقال فايل‌ها، با پيام‌هايي همراه باشند چطور؟

و اين كه آيا با ابزاري كه معرفي مي‌شه، امكانش هست چندين كلاينت به طور همزمان فايل ارسال يا دريافت كنند يا خير؟

اگه زحمتي نيست، آدرسي براي يادگيري ابزار مربوطه (ترجيحاً فارسي)، معرفي كنيد.

ممنون

----------


## مهران رسا

> در صورتي كه بخوايم اين انتقال فايل‌ها، با پيام‌هايي همراه باشند چطور؟


از Indy استفاده کنید .

----------


## majidbestgame

سلام...آقا سوال خوبی بود...منم خیلی به راهنمایی نیاز دارم. میخوام مثلا یک فایل را تحت شبکه از سرور به کلاینت ارسال کنیم...از ServerSocket و ClientSocket استفاده کردم پیام و مسیج ها راحت ارسال میشه ولی فایل رو نمیتونه ارسال کنه..ممنون مشم از دوستان اگه بتونن کمک کنن

----------


## alinikaein

> از Indy استفاده کنید .


ساير دوستان نظري ندارند؟ آيا ابزارهاي مناسب ديگه‌اي هم وجود داره يا Indy بهترين گزينه‌ست؟


در صورتي كه بخوايم همزمان چند انتقال داشته باشيم، چه ابزاري را پيشنهاد مي‌كنيد؟


ممنون... يا علي... موفق باشيد...

----------


## مهران رسا

> در صورتي كه بخوايم همزمان چند انتقال داشته باشيم، چه ابزاري را پيشنهاد مي‌كنيد؟
> ممنون... يا علي... موفق باشيد...


انتظار دارید همه چیز آماده باشه ؟ Indy امکانات گسترده ای برای انتقال فایل و پیغام روی شبکه در اختیار ما قرار میده . دیگه استفاده از اون و به کار گیری تکنیک های مختلف برای پیش بردن اهداف مورد نظر بر عهده ی برنامه نویس هست .

----------


## alinikaein

> انتظار دارید همه چیز آماده باشه ؟ Indy امکانات گسترده ای برای انتقال فایل و پیغام روی شبکه در اختیار ما قرار میده . دیگه استفاده از اون و به کار گیری تکنیک های مختلف برای پیش بردن اهداف مورد نظر بر عهده ی برنامه نویس هست .


دوست عزيز؛ سوء تفاهم پيش نياد، عصباني هم نشيد، من انتظار ندارم همه چيز آماده باشه، انتظار دارم از ابزاري كه استفاده مي‌كنم و بر پايه‌ي اون كامپوننتي طراحي مي‌كنم و مي‌نويسم، بهينه باشه و بعداً به مشكل بر نخورم.
الآن دارم گزينه‌هاي مختلف را ارزيابي و تحليل مي‌كنم، كه بعداً در مرحله‌ي پياده‌سازي بتونم به مرحله‌ي خوبي از ايده‌آل‌ها برسم.
و گرنه كسي كه انتظار داره همه چيز براش آماده باشه، بايد بشينه تا ديگران براش يه كاري انجام بدن و اسم‌ش برنامه‌نويس نمي‌شه. پس لطفاً اگه دوستان سؤالي مي‌پرسند، مقداري سعه‌ي صدر داشته باشيد و با ناراحتي و عصبانيت جواب نديد.

عذرخواهي مي‌كنم اگه موجب ناراحتي شما شدم. انتظار هم دارم ساير دوستان كه در اين زمينه فعاليت كردند، نظرات خودشون را اعلام كنند.

ممنون... يا علي... موفق باشيد...

----------


## مهران رسا

> دوست عزيز؛ سوء تفاهم پيش نياد، عصباني هم نشيد، من انتظار ندارم همه چيز آماده باشه، انتظار دارم از ابزاري كه استفاده مي‌كنم و بر پايه‌ي اون كامپوننتي طراحي مي‌كنم و مي‌نويسم، بهينه باشه و بعداً به مشكل بر نخورم.
> الآن دارم گزينه‌هاي مختلف را ارزيابي و تحليل مي‌كنم، كه بعداً در مرحله‌ي پياده‌سازي بتونم به مرحله‌ي خوبي از ايده‌آل‌ها برسم.
> و گرنه كسي كه انتظار داره همه چيز براش آماده باشه، بايد بشينه تا ديگران براش يه كاري انجام بدن و اسم‌ش برنامه‌نويس نمي‌شه. پس لطفاً اگه دوستان سؤالي مي‌پرسند، مقداري سعه‌ي صدر داشته باشيد و با ناراحتي و عصبانيت جواب نديد.
> 
> عذرخواهي مي‌كنم اگه موجب ناراحتي شما شدم. انتظار هم دارم ساير دوستان كه در اين زمينه فعاليت كردند، نظرات خودشون را اعلام كنند.
> 
> ممنون... يا علي... موفق باشيد...


والا یادم نمیاد در زمان نوشتن اون پست عصبانی بوده باشم . به قول آقای راد جملات من رو با این (  :لبخند:  ) احساس بخونید .

شما سوال کردید :



> در صورتي كه بخوايم همزمان چند انتقال داشته باشيم، چه ابزاري را پيشنهاد مي‌كنيد؟


و من هم جواب دادم :



> Indy امکانات گسترده ای برای انتقال فایل و پیغام روی شبکه در اختیار ما  قرار میده . دیگه استفاده از اون و به کار گیری تکنیک های مختلف برای پیش  بردن اهداف مورد نظر بر عهده ی برنامه نویس هست





> بهينه باشه و بعداً به مشكل بر نخورم


نگران نباشید . Indyی که در Delphi 2010 ازش استفاده شده اولین نسخه Indy نیست .

نتیجه گیری : بهترین ابزار برای حل مشکل شما Indy است .

----------


## K.Mohammadreza

با سلام 
دوست نداشتم توي اين تاپيک پست بزارم ولي چون دوستمون نوشتن "نتیجه گیری : بهترین ابزار برای حل مشکل شما Indy است " يک برنامه فول سورس ميزارم با استفاده از ClientSocketو ServerSocket در شبکه فايل ميفرسته اينم هديه من به دوست خوبمون alinikaein بسيار جامع و عالي و خوب هم کار ميکنه

----------


## alinikaein

> با سلام 
> دوست نداشتم توي اين تاپيک پست بزارم ولي چون دوستمون نوشتن "نتیجه گیری : بهترین ابزار برای حل مشکل شما Indy است " يک برنامه فول سورس ميزارم با استفاده از ClientSocketو ServerSocket در شبکه فايل ميفرسته اينم هديه من به دوست خوبمون alinikaein بسيار جامع و عالي و خوب هم کار ميکنه



  دقيقاً قضيه همين هست، من با ClientSocketو ServerSocket آشنايي دارم. به خاطر همين اين پست را ارسال كردم.
  مي‌خواستم افكار دوستان را به چالش بكشم و فعاليت‌هايي كه دوستان در اين زمينه انجام دادن را به بحث بذارم.
  دوست خوب‌مون آقاي M8SPY  بهترين ابزار را Indy معرفي كردن، من از صحبت‌هاي ايشون قدرداني مي‌كنم  ولي دلم مي‌خواد ساير دوستان هم در اين زمينه نظرات‌شون را اعلام كنند.  همون طور كه دوست عزيزمون آقاي K.Mohammadreza  يك برنامه نمونه ارسال كردند، با ابزار ClientSocketو ServerSocket  برنامه‌ي خيلي خوبي نوشتن. حالا نكته اينه كه توي عمليات كدوم ابزار، در فعاليت‌هاي سنگين، كم نمياره و قوي‌تر عمل مي‌كنه؟


باز هم ممنون از نظرات و صحبت‌هاي دوستان.

يا علي... موفق باشيد...

----------


## مهران رسا

> ولي چون دوستمون نوشتن "نتیجه گیری : بهترین ابزار برای حل مشکل شما Indy  است " يک برنامه فول سورس ميزارم با استفاده از ClientSocketو ServerSocket  در شبکه فايل ميفرسته


اگه اشتباه نکنم ServerSocket به صورت به صورت Non-Blocking و رویداد گرا کار میکنه در صورتی که Indy به صورت Blocking هست و کار رو ساده تر میکنه . ضمناً من نگفتم *تنها* راه ، استفاده از Indy است . گفتم *بهترین* راه ، استفاده از Indy موجود در جدیدترین نسخه دلفیه که واقعاً کامل و جامع هم هست .




> حالا نكته اينه كه توي عمليات كدوم ابزار، در فعاليت‌هاي سنگين، كم نمياره و قوي‌تر عمل مي‌كنه؟


دقیقاً نمیدونم اون ابزار ServerSocket به چه صورت کار میکنه و آیا مدیریت Thread ها بر عهده برنامه نویس هست یا نه . ضمن اینکه من خیلی وقت نیست دلفی رو شروع کردم و با ابزار های ایجاد ارتباط Tcp در نسخه های پایین تر دلفی آشنایی ندارم . اما توی این مدتی که در این مورد تحقیق کردم متوجه شدم فعلاً کامل ترین ابزاری که پشتیبانی خوبی هم ازش میشه Indy هست که خودش مدیریت Thread هارو برعهده میگیره و برای مدیریت بهتر منابع سیستم میتونید خصوصیت Schedulerش رو هم تنظیم کنید . اگه در عمل هم بخوایم در مورد Indy نظر بدیم به شرط اینکه قوانین مربوط به استفاده ازش رو رعایت کنیم ، طبق تجربه شخصی خودم ، به زیبایی کار میکنه و واقعاً قدرتمنده . 

نهایتاً بد نیست این تاپیک رو هم مطالعه کنید : https://barnamenevis.org/showthread.php?t=228206

موفق باشید

----------


## alinikaein

> اگه اشتباه نکنم ServerSocket به صورت به صورت Non-Blocking و رویداد گرا کار میکنه در صورتی که Indy به صورت Blocking هست و کار رو ساده تر میکنه . ضمناً من نگفتم *تنها* راه ، استفاده از Indy است . گفتم *بهترین* راه ، استفاده از Indy موجود در جدیدترین نسخه دلفیه که واقعاً کامل و جامع هم هست .
> 
> دقیقاً نمیدونم اون ابزار ServerSocket به چه صورت کار میکنه و آیا مدیریت Thread ها بر عهده برنامه نویس هست یا نه . ضمن اینکه من خیلی وقت نیست دلفی رو شروع کردم و با ابزار های ایجاد ارتباط Tcp در نسخه های پایین تر دلفی آشنایی ندارم . اما توی این مدتی که در این مورد تحقیق کردم متوجه شدم فعلاً کامل ترین ابزاری که پشتیبانی خوبی هم ازش میشه Indy هست که خودش مدیریت Thread هارو برعهده میگیره و برای مدیریت بهتر منابع سیستم میتونید خصوصیت Schedulerش رو هم تنظیم کنید . اگه در عمل هم بخوایم در مورد Indy نظر بدیم به شرط اینکه قوانین مربوط به استفاده ازش رو رعایت کنیم ، طبق تجربه شخصی خودم ، به زیبایی کار میکنه و واقعاً قدرتمنده . 
> 
> نهایتاً بد نیست این تاپیک رو هم مطالعه کنید : https://barnamenevis.org/showthread.php?t=228206
> 
> موفق باشید



سلام؛

ممنون از جواب‌تون، فكر مي‌كنم اگه اين جواب را با جواب‌هاي قبلي مقايسه كنيد، مي‌بينيد كه اين جواب قابل ستايش هست، چون با دليل و برهان نقد و بررسي كرديد و واقعاً راهنمايي بسيار خوبي بود. مخصوصاً در مورد بحث Thread كه بسيار مهم هست.
در مورد پست قبلي هم كه گفتم عصباني بوديد، عذرخواهي مي‌كنم.

پستي كه اشاره فرموديد را قبلاً ديده بودم، ولي مجدداً مراجعه كردم. باز هم تشكر مي‌كنم.

در عين حال، اگر ساير دوستان، دليل و برهان يا نقد خاصي بر روي دو ابزار مطرح شده (Indy و Client/Server Socket) دارند، ممنون مي‌شم بحث را ادامه بدهند.


يا علي... موفق باشيد...

----------


## K.Mohammadreza

با سلام و خشته نباشيد
در مورد Theard و نوشتن برنامه اي MultiTheard‌بايد عرض کنم که ClientSocketو ServerSocket هم قابليت MutiTherd‌شدن را دارند و با يک سرچ ساده در گ.گل مي تونيد به نتايج باور نکردني برسيد
با تشکر

----------


## vcldeveloper

> در مورد Theard و نوشتن برنامه اي MultiTheard‌بايد عرض کنم که  ClientSocketو ServerSocket هم قابليت MutiTherd‌شدن را دارند و با يک سرچ  ساده در گ.گل مي تونيد به نتايج باور نکردني برسيد


اگر سرچ مورد نظر را با دقت انجام بدید، متوجه میشید که اون دو کامپوننت سال ها ست که دیگه توسعه داده نمیشند، و صرفا برای Backward Compatibility در دلفی نگهداری میشند، و البته باگ های مختلفی هم دارند. نکته آخر هم اینکه از نظر قابلیت، اون کامپوننت ها فقط بخشی از قابلیت های Indy را ارائه می کنند؛ یعنی می تونید نهایتا آنها را معادل دو کامپوننت IdTcpClient و IdTcpServer مجموعه Indy بگیرید. در حالی که مجموعه Indy شامل تعداد زیادی کامپوننت برای پیاده سازی پروتکل های مختلف رایج در اینترنت، و قابلیت های متعدد هست.




> *بهترين ابزار انتقال فايل در شبكه چيست؟*


سوال واضحی نیست که کسی بخواد بهش جواب واضحی بده؛ از یک مرورگر وب گرفته، تا یک FTP Client و یک شبکه P2P مثل Torrent، همگی فایل انتقال میدند، ولی نیازهایشان با هم یکی نیست که یک ابزاری باشه برای همه آنها بهترین باشه.

----------


## alinikaein

> اگر سرچ مورد نظر را با دقت انجام بدید، متوجه میشید که اون دو کامپوننت سال ها ست که دیگه توسعه داده نمیشند، و صرفا برای Backward Compatibility در دلفی نگهداری میشند، و البته باگ های مختلفی هم دارند. نکته آخر هم اینکه از نظر قابلیت، اون کامپوننت ها فقط بخشی از قابلیت های Indy را ارائه می کنند؛ یعنی می تونید نهایتا آنها را معادل دو کامپوننت IdTcpClient و IdTcpServer مجموعه Indy بگیرید. در حالی که مجموعه Indy شامل تعداد زیادی کامپوننت برای پیاده سازی پروتکل های مختلف رایج در اینترنت، و قابلیت های متعدد هست.
> 
> 
> سوال واضحی نیست که کسی بخواد بهش جواب واضحی بده؛ از یک مرورگر وب گرفته، تا یک FTP Client و یک شبکه P2P مثل Torrent، همگی فایل انتقال میدند، ولی نیازهایشان با هم یکی نیست که یک ابزاری باشه برای همه آنها بهترین باشه.



نيازي كه من مي‌خوام در اين سؤال برطرف كنم، ساخت يك فايل‌سرور هست كه در يك شبكه‌ي داخلي بتونه به كلاينت‌ها سرويس بده. نهايتاً متصل شدن به اينترنت با شرط داشتن يك IP Static و معتبر كه كلاينت‌هاي يك شبكه‌ي خارجي بتونند به اين فايل‌سرور دسترسي داشته باشند و سرويس بگيرند.
حالا نظر شما در اين مورد چيه آقاي كشاورز؟

ممنون از پاسخ‌هاتون... يا علي... موفق باشيد...

----------


## vcldeveloper

> نيازي كه من مي‌خوام در اين سؤال برطرف كنم، ساخت يك فايل‌سرور هست كه در  يك شبكه‌ي داخلي بتونه به كلاينت‌ها سرويس بده. نهايتاً متصل شدن به  اينترنت با شرط داشتن يك IP Static و معتبر كه كلاينت‌هاي يك شبكه‌ي خارجي  بتونند به اين فايل‌سرور دسترسي داشته باشند و سرويس بگيرند.
> حالا نظر شما در اين مورد چيه آقاي كشاورز؟


FTP برای همچین اموری ساخته شده؛ می تونید با استفاده از کامپوننت FTPServer مجموعه Indy، همچین چیزی را به راحتی پیاده سازی کنید.

----------


## K.Mohammadreza

با سلام 
من کلا با کامپوننت هاي Indy مشکل دارم و خيلي ازشون خوشم نمياد و بجاي اونها از مجموعه کامپوننت بسيار قوي ICS استفاده مي کنم که فکر نکنم بهتر از اونها پيدا بشه.نميدونم قوانين سايت اجازه آپلود اين کامپوننت ها را ميده يا نه فقط به اين نکته اشاره کنم که در هز زمينه اي از شبکه کامپوننت داره و اپن سورس هم هست.

----------


## Felony

> با سلام 
> من کلا با کامپوننت هاي Indy مشکل دارم و خيلي ازشون خوشم نمياد و بجاي اونها از مجموعه کامپوننت بسيار قوي ICS استفاده مي کنم که فکر نکنم بهتر از اونها پيدا بشه.نميدونم قوانين سايت اجازه آپلود اين کامپوننت ها را ميده يا نه فقط به اين نکته اشاره کنم که در هز زمينه اي از شبکه کامپوننت داره و اپن سورس هم هست.


وقتی متن باز هست میتونید آپلود کنید دیگه !

----------


## alinikaein

حالا كه يك سري كامپوننت ديگه معرفي شد، مقايسه‌ي بهتري مي‌شه انجام داد. حالا نقد كنيد كدوم بهتره؟

----------


## K.Mohammadreza

واقعا فکر نمي کردم که حتي چند نفر پيدا نشن و از اون کامپوننهاي حرفه اي استفاده کنن......

----------


## alinikaein

> واقعا فکر نمي کردم که حتي چند نفر پيدا نشن و از اون کامپوننهاي حرفه اي استفاده کنن......



مي‌شه امكانات و مزاياي اين كامپوننت را ذكر كنيد؟
ممنون مي‌شم.


يا علي... موفق باشيد...

----------


## K.Mohammadreza

براي ديدن امکانات اين کامپوننت به صدها مثال همراه کامپوننت نگاهي بيندازيد، مثالها و Sample ها گويا قدرت و توانايي کامپوننت ها هستند

----------


## vcldeveloper

Indy از نظر پروتکل های مورد پشتیبانی و ابزارهای مختلفی که ارائه میکنه، قابلیت های بیشتری نسبت به ICS داره. 
معماری Indy از ICS بهتر هست، و بیشتر Plug-able هست.
Indy به صورت Blocking mode کار میکنه، در حالی که ICS به صورت Nonblocking کار میکنه؛ در نتیجه کار کردن با Indy ساده تر از کار کردن با ICS هست. توی ICS شما همش با Event و Callback function باید سر و کار داشته باشید.
Indy تقریبا مستندات بهتری نسبت به ICS داره، اما مثال های ICS از مثال های Indy بسیار بیشتر هستند.

به طور کلی، هر دو مجموعه کامپوننت های خوبی هستند، اما در اکثر مواقع استفاده از Blocking Mode ترجیح داره، مگر در سناریوهای خاصی که Nonblocking mode بهتر جواب میده، یا در شرایطی که Indy به طور خاص در انجام کاری مشکل داره.

----------


## K.Mohammadreza

> به طور کلی، هر دو مجموعه کامپوننت های خوبی هستند، اما در اکثر مواقع استفاده از Blocking Mode ترجیح داره، مگر در سناریوهای خاصی که Nonblocking mode بهتر جواب میده، یا در شرایطی که Indy به طور خاص در انجام کاری مشکل داره.


من با هر دو مجموعه کامپوننت کار کردم ولي راحتي و قابل فهم بودن دستورات ICS قابل قياس با Indy نيست مسلماً هر مجموعه کامپوننتي يک سري مزايا و يک سري معايب داره ولي من چون ميخوام کنترل سخت افزارهيا شبکه را انجام بدم(نظير بررسي پروتکل SNMP برروي روترها) با کامپوننتهاي ICS راحتترم و سريعتر به نتيجه دلخواه ميرسم

----------


## alinikaein

جناب K.Mohammadreza با تشكر از پاسخ شما.

من كاري كه مي‌خوام انجام بدم را توضيح دادم، حالا باز هم پيشنهاد شما استفاده از ICS هست؟


ممنون... يا علي...  موفق باشيد...

----------

