PDA

View Full Version : سوال: کد دلفی برای انتقال فایل با استفاده از iIdTCPClient , IdTCPServer به روش مستقیم بین دو کلاینت



Delphi Pro
چهارشنبه 25 شهریور 1394, 12:42 عصر
باسلام
یکی از کاربردهای کامپوننت IdTCPClient, IdTCPServer ارسال فایل بین کلاینت و سرور میباشد
سوال اینجاست که اگر بخواهیم بین دو کلاینت تبادل فایل انجام دهیم دو روش وجود دارد
1- ارسال فایل از کلاینت اول به سرور و سپس ارسال فایل از سرور به کلاینت دوم
2- ارسال فایل از کلاینت اول به کلاینت دوم بصورت مستقیم

درخواست : برنامه نویسی به زبان دلفی برای انتقال فایل به روش 2 میباشد یعنی انتقال مستقیم یک فایل از کلاینت اول به کلاینت دوم
نکته:در این روش سرور فقط باید به عنوان یک ایجاد کننده کانال بین دو کلاینت عمل کرده و فایل در این کانال بین دو کلاینت منتقل شود.
با تشکر

Mask
پنج شنبه 26 شهریور 1394, 22:14 عصر
من مشکل شمارو متوجه نشدم.
دقیقا نیاز دارید چه کاری انجام بدهید؟
همه زبانهای برنامه نویسی اعم از دلفی امکان ارسال و دریافت فایل به هر روشی رو دارند.

Delphi Pro
جمعه 27 شهریور 1394, 09:44 صبح
در نرم افزارهای چت یکی از قابلیتها ارسال فایل بین کاربران میباشد
بیشتر نمونه کدهایی که من پیدا کردم همگی ارسال فایل از کاربر به سرور یا برعکس از سرور به کاربر میباشد
در این روش سه مشکل وجود دارد:
1- سرعت ارسال نصف میباشد زیرا یکبار فایل از کاربر یک به سرور و سپس ارسال مجدد همان فایل از سرور به کاربر دو میباشد
2- ارسال فایل بصورت هم زمان نمیباشد یعنی مثلا ارسال یک فایل حجیم زمان زیادی برای ارسال به سرور نیاز دارد
3- پهنای باند زیادی از سرور اشغال کرده و عملا در حجم زیاد ،تبادل فایل بین کاربران و سرور با مشکل پردازش و پهنای باند برخورد میکند
من از نظر تئوری میدانم که وقتی یک کاربر با سرور ارتباط برقرار میکند یک پورت بین کاربر و سرور ایجاد میشود . حال اگر کاربر دیگر بتواند به این پورت دسترسی پیدا کند دیگر نیاز به دخالت سرور نبوده و میتوان از کانال بصورت مستقیم استفاده نمود.
درخواست من کد نویسی برای ارسال فایل بین دو کاربر چت بدون درگیر شدن سرور میباشد
باتشکر

Mask
جمعه 27 شهریور 1394, 17:57 عصر
برنامه ای که مد نظر شماست، قراره بر روی اینترنت کار کنه ، یا شبکه محلی؟


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

Delphi Pro
شنبه 28 شهریور 1394, 08:02 صبح
کاربرها بر روی اینترنت بوده و هیچکدام ای پی ولید نمیباشند.
سرچهای بسیاری زدم ولی همگی روش ارسال به سرور را توضیح داده اند.
لطفا اگر کدی سراغ دارید که ارسال فایل به روش کلاینت به کلاینت را توضیح داده معرفی کنید.

Mask
شنبه 28 شهریور 1394, 16:37 عصر
بهترین و استیبلترین روش همون استفاده از سرور میانجی هست.
چون کاربرها پشت Nat هستند و دسترسی بهشون به صورت مستقیم مقدور نیست.
اما اگه اصرار به اتصال دو کاربر به یکدیگر با ای پی اینولید داشته باشید 2 راه فعلا در خاطرم هست (شاید راههای دیگه ای باشه. فعلا حضور ذهن ندارم) :
1- استفاده از UDP : در صورتی که ISP شما Broadcasting Udp رو نبسته باشه.
2- استفاده از Port Forwarding در مودم ADSL یا روتر.
و..
موفق باشید.

Delphi Pro
شنبه 28 شهریور 1394, 17:45 عصر
بنظر شما یک نرم افزار چت با قابلیت ارسال فایل باید کاربر را درگیر محدودیتهای isp و یا منوط به تنظیمات خاص در مودم کند؟
آیا در نرم افزارهای عمومی چت منطقی است که یک سرور با پهنای باند محدود درگیر کلیه سند و ریسیو فایلهای کاربران شود؟
برای مثال نرم افزار TeamViewer سرورها و پهنای باند خود را درگیر ارسال فایلهای کاربران کرده یا اینکه از کانال ارتباطی دو کاربر استفاده میکند؟
اگر روشی باشد که سرور اجازه استفاده از پورت باز شده بر روی کلاینت را موقتا به کلاینت دیگر واگذار کند و یا هر دو بطور هم زمان از این پورت استفاده نمایند احتمالا مشکل برطرف خواهد شد
در این روش سرور باید سوکت اختصاصی خود بر روی کاربر گیرنده فایل را به کاربر ارسال کننده بدهد و بصورت مجازی کاربر فرستنده نقش سرور را ایفا کرده و پس از اتمام ارسال این امکان از او گرفته شود.و سرور فقط نقش مدیریت این اختصاص و قطع آن را بعهده گیرد.
در هر صورت لازمه یک نرم افزار چت امکان ارسال فایل با سرعت مناسب ، بلادرنگ و حداقل پردازش و مصرف پهنای باند کم برای سرور میباشد.
منتظر ارائه راه حلهای مناسب هستم
با تشکر

Delphi Pro
یک شنبه 29 شهریور 1394, 08:05 صبح
من فکر می کنم ایجاد یک کانال ( channel ) بین دو کاربر کار پیچیده ای نباشد
همنطور که این کانال بین سرور و یک کاربر پشت نت بوجود اومده میتونه بین دو کاربر با مدیریت سرور نیز بوجود بیاد .
در ارتباط بین یک کاربر با ای پی غیر ولید با سرور کانالی که شامل ای پی مودم و پورتی که توسط مودم اختصاص یافته به کاربر ایجاد میشود .
حال اگر این ای پی و پورت اختصاصی در اختیار کاربر دوم قرار گیرد میتواند کاربر دوم اطلاعات مورد نظر را از طریق آن به کاربر یک ارسال نماید.
به همین سادگی.
متاسفانه اطلاعات من در زمینه لایه های پایین شبکه و کد نویسی برای آن کم میباشد و از دوستان اگر کسی در این زمینه اطلاعات کافی دارد شاید بتواند این مشکل را حل کند.
با تشکر از پی گیری Mask

ابوالفضل عباسی
چهارشنبه 22 مهر 1394, 16:46 عصر
من هم خیلی مشتاقم ببینم روش ساده تری که این delphi pro نیازداره وجود دارد یا نه
یعنی کسی نیست در این زمینه کمک کنه؟:گریه:

Mask
چهارشنبه 22 مهر 1394, 22:15 عصر
من هم خیلی مشتاقم ببینم روش ساده تری که این delphi pro نیازداره وجود دارد یا نه
یعنی کسی نیست در این زمینه کمک کنه؟:گریه:
اگه وجود داشت، سران اینترنت از روشهایی که من توضیح دادم استفاده نمیکردند.

ابوالفضل عباسی
پنج شنبه 23 مهر 1394, 17:57 عصر
مگه میشه؟
یعنی تا حالا سران اینترنت به این فکرنیوفتاده اند که وقتی سرور قرار میدهند چه قدر از سرعت کاسته میشه؟:عصبانی::عصبانی++:
واقعا عجیبه

vcldeveloper
چهارشنبه 12 اسفند 1394, 19:17 عصر
درخواست من کد نویسی برای ارسال فایل بین دو کاربر چت بدون درگیر شدن سرور میباشد


اگر روشی باشد که سرور اجازه استفاده از پورت باز شده بر روی کلاینت را موقتا به کلاینت دیگر واگذار کند و یا هر دو بطور هم زمان از این پورت استفاده نمایند احتمالا مشکل برطرف خواهد شد
بهش میگن UDP hole punching (https://en.wikipedia.org/wiki/UDP_hole_punching)؛ این روش برای دور زدن محدودیت استفاده از NAT توسط کاربران مبداء و مقصد استفاده میشه. در این روش یک سرور وظیفه میانجیگری برقراری ارتباط بین دو کاربر را بازی میکنه، و بعد از برقراری ارتباط بین دو کاربر، سرور از مدار خارج میشه. یکی از معروف ترین نرم افزارهایی که از این روش برای برقراری ارتباط Peer-to-Peer و دور زدن NAT استفاده میکنه، پیام رسان Skype هست.

Mask
پنج شنبه 13 اسفند 1394, 07:39 صبح
بهش میگن UDP hole punching (https://en.wikipedia.org/wiki/UDP_hole_punching)؛ این روش برای دور زدن محدودیت استفاده از NAT توسط کاربران مبداء و مقصد استفاده میشه. در این روش یک سرور وظیفه میانجیگری برقراری ارتباط بین دو کاربر را بازی میکنه، و بعد از برقراری ارتباط بین دو کاربر، سرور از مدار خارج میشه. یکی از معروف ترین نرم افزارهایی که از این روش برای برقراری ارتباط Peer-to-Peer و دور زدن NAT استفاده میکنه، پیام رسان Skype هست.
یا الله. رسیدن بخیر برادر
این روش در برخی از isp ها مسدود است.