صفحه 2 از 2 اولاول 12
نمایش نتایج 41 تا 61 از 61

نام تاپیک: ارسال فايل حجيم با indy

  1. #41

    نقل قول: ارسال فايل حجيم با indy

    کد خوبی بود ! اما من همچنان روی ارسال با استفاده از WriteLn (رشته ای) تاکید دارم . دلیلش هم اینه که با استفاده از WriteLn میدونیم دقیقاً چه چیزی داره به سرور ارسال میشه . ضمن اینکه ما میخوایم تنها با یک سرور و از طریق یک پورت همه پیغام ها(اعم از لاگین ، پی ام ، ارسال فایل) رو پیاده سازی کنیم .

    میخوام برنامه من قابلیت چت مثل یاهو رو داشته باشه
    از موضوع تاپیک خارج هست . میتونید در یک تاپیک جدید مطرح کنید .
    آخرین ویرایش به وسیله مهران رسا : سه شنبه 08 تیر 1389 در 11:48 صبح

  2. #42

    نقل قول: ارسال فايل حجيم با indy

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

  3. #43

    نقل قول: ارسال فايل حجيم با indy

    کد خوبی بود ! اما من همچنان روی ارسال با استفاده از WriteLn (رشته ای) تاکید دارم . دلیلش هم اینه که با استفاده از WriteLn میدونیم دقیقاً چه چیزی داره به سرور ارسال میشه .
    خوب در عوض شما دارید اطلاعات رو در حد چند برابر بیشتر میفرستید . سرعت و زمان چی میشه پس؟
    تازه اون پردازشی که برای رشته ها هم لازم داردی رو در نظر بگیرید .
    در عین حال ممنون . کمک زیادی بهم کردین .
    درباره اون فرم ها چی؟ نظر خاصی دارین ؟
    چون برای کسترش ارسال فایل هم میخوام از همین روش استفاده کنم .

  4. #44

    نقل قول: ارسال فايل حجيم با indy

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

    خوب در عوض شما دارید اطلاعات رو در حد چند برابر بیشتر میفرستید
    این مشکل هم بهه زودی برطرف میشه . ضمناً نکته ای که در مورد پشتیبانی از ارسال چند کاربره وجود داره اینه که به دلیل مشکلاتی که در اثر Shift دادن پیش میاد نباید از آرایه و یا موارد مشابه برای کنترل کاربران استفاده کرد .
    آخرین ویرایش به وسیله مهران رسا : سه شنبه 08 تیر 1389 در 11:40 صبح

  5. #45

    نقل قول: ارسال فايل حجيم با indy

    ok.
    یه پست تاپیک جدید ساختم . حالا لطفا اگر اطلاعاتی در اون زمینه دارید بفرمایید .
    ممنون.
    https://barnamenevis.org/showthread.php?t=230715

  6. #46

    نقل قول: ارسال فايل حجيم با indy

    خب ؛ ابتدا از شما تقاضا دارم توضیحات موجود در این پست رو مطالعه بفرمایید :
    https://barnamenevis.org/showpo...1&postcount=23
    و اما مشکل جدید : وقتی کار Transfer یکی از مشتری ها تموم بشه ، در حالی که ممکنه 10 کلاینت دیگه هم زمان در حال ارسال فایل باشند ، باید آرایه Global تغییر بعد پیدا کنه و اینکار باعث ایجاد اختلال در عملکرد بقیه کلاینت ها میشه . چون برای اینکه بفهمیم قطعه های فایل مربوط به کدوم مشتری هستند از آرایه ای استفاده کردیم که در زمان درخواست به طولش یک واحد اضافه میشد و در زمان اتمام عملیات یک واحد از طولش کم میشد . اما تصویر کنید حلقه ی بررسی در حال اجراست و همون لحظه کار یکی از مشتری ها به پایان میرسه . در این صورت Object مربوطه Free میشه و متعاقباً باید طول آرایه هم یک واحد کمتر بشه . که نهایتاً با اینکار عملیات ارسال فایل بقیه کلاینت ها به دلیل تغییر تعداد خانه های آرایه با مشکل مواجه میشه .

     for i := low(Fs) to high(Fs) do


    چی پیشنهاد میکنید ؟
    آخرین ویرایش به وسیله مهران رسا : پنج شنبه 17 تیر 1389 در 23:11 عصر

  7. #47

    نقل قول: ارسال فايل حجيم با indy

    بله دقیقا این مشکل هست .
    که من برای این کار از این روش استفاده کردم .
    یک ارایه با طور ثابت(مثلا به طور حداکثر کانکشن هایی که میخوایم با TcpSrver باشه) در نظر میگیریم که قاعدتا هر کدوم یک اندیش دارن . ارایه میتونه از نوع TFileStream و یا MemoryStream باشه . و حتی میتونه اشاره گری باشه به یکی از این دو ساختار .
    در مرحله اول که کلاینت اعلام میکنه میخوام برات فایل بفرستم داخل ارایه میگریده و اولین خانه nil رو پیدا میکنه و اندیس اون رو به کلاینت میفرسته . از این به بعد کلاینت در پکت های خود این اندیس رو جای میده و نتیجه سرور میفهمه مال کجاست.
    در انتها هم که کارش تمام شد اون محلی که اختصاص داده شده رو free میکنیم. و خانه ارایه رو هم برابر nil قرار میدهیم .
    این جوری طول ارایه کم نمیشه دیگه .
    البته اگر هم بخواهیم خیلی نگران حافظه باشیم . میتونیم در هر بار که درخواست شد شی حافظه رو بسازیم و اشاره گر به اون رو به کلاینت پس بفرستیم .

  8. #48

    نقل قول: ارسال فايل حجيم با indy

    کسی درباره پست های 40 - 41 نظری نداره ؟

  9. #49

    نقل قول: ارسال فايل حجيم با indy

    نقل قول نوشته شده توسط bmanfy مشاهده تاپیک
    بله دقیقا این مشکل هست .
    که من برای این کار از این روش استفاده کردم .
    یک ارایه با طور ثابت(مثلا به طور حداکثر کانکشن هایی که میخوایم با TcpSrver باشه) در نظر میگیریم که قاعدتا هر کدوم یک اندیش دارن . ارایه میتونه از نوع TFileStream و یا MemoryStream باشه . و حتی میتونه اشاره گری باشه به یکی از این دو ساختار .
    در مرحله اول که کلاینت اعلام میکنه میخوام برات فایل بفرستم داخل ارایه میگریده و اولین خانه nil رو پیدا میکنه و اندیس اون رو به کلاینت میفرسته . از این به بعد کلاینت در پکت های خود این اندیس رو جای میده و نتیجه سرور میفهمه مال کجاست.
    در انتها هم که کارش تمام شد اون محلی که اختصاص داده شده رو free میکنیم. و خانه ارایه رو هم برابر nil قرار میدهیم .
    این جوری طول ارایه کم نمیشه دیگه .
    البته اگر هم بخواهیم خیلی نگران حافظه باشیم . میتونیم در هر بار که درخواست شد شی حافظه رو بسازیم و اشاره گر به اون رو به کلاینت پس بفرستیم .
    نه تفاوتی نداره .چون نهایتاً ما از خصوصیت FileName مربوط به شی FileStream برای مطلع شدن از صحت نام فایل جاری استفاده میکنیم . حالا حتی اگه تعداد اعضای آرایه هم ثابت باشه ، در زمانی که یکی از اشیاء Free بشه در حلقه زیر در قسمتی که مشخص کردم یک استثنا به وجود میاد . علتش هم اینه که شی []FS وجود نداره چون قبلاً Free شده :

              for i := low(Fs) to high(Fs) do
    begin
    if Fs[i].FileName = FileSign then
    begin

    //Get any part of file
    FilePart := copy(CMd, JPos + 3, length(CMd));
    Split('`', FilePart, TsL);
    //Write the file as bytes
    for jj := 0 to TsL.Count - 1 do
    begin
    AChar := TsL[jj];
    AByte := strtoint(AChar);
    Ms[i].Write(AByte, 1);
    end;

    end;
    end;


    کسی درباره پست های 40 - 41 نظری نداره ؟
    خواهش میکنم نظم تاپیک رو رعایت کنید .

  10. #50

    نقل قول: ارسال فايل حجيم با indy

    نه تفاوتی نداره .چون نهایتاً ما از خصوصیت FileName مربوط به شی FileStream برای مطلع شدن از صحت نام فایل جاری استفاده میکنیم . حالا حتی اگه تعداد اعضای آرایه هم ثابت باشه ، در زمانی که یکی از اشیاء Free بشه در حلقه زیر در قسمتی که مشخص کردم یک استثنا به وجود میاد . علتش هم اینه که شی []FS وجود نداره چون قبلاً Free شده :
    نه دیگه قرار نیست ما بیایم از ابتدا تا انتها ارایه رو بررسی کنیم و ببینیم نام فایلش چیه .
    گفتم در مرحله اول که کلاینت میگه میخوام برات فایل بفرستم اندیس ارایه براش فرستاده میشه و از این به بعد بسته های اطلاعاتی رو که به سمت سرور خواهد فرستاد هم این اندیس به ابتداش اضافه خواهد شد. و سرور هم با دریافت هر بسته ابتدا اندیس رو بدست مباره و بعد مستقیم به اون اندیس مراجعه میکنه . که البته خوب میشه قبلش هم چک کرد که nil نباشه تا یهو خطا رخ نده .
    اینجوری دیگه یه حلقه For اجر نمیشه که در زمانن صرفه جویی میشه .

    خواهش میکنم نظم تاپیک رو رعایت کنید .
    ؟؟؟؟؟!!!!!!!!!!!

  11. #51

    نقل قول: ارسال فايل حجيم با indy

    نه دیگه قرار نیست ما بیایم از ابتدا تا انتها ارایه رو بررسی کنیم و ببینیم نام فایلش چیه .
    گفتم در مرحله اول که کلاینت میگه میخوام برات فایل بفرستم اندیس ارایه براش فرستاده میشه و از این به بعد بسته های اطلاعاتی رو که به سمت سرور خواهد فرستاد هم این اندیس به ابتداش اضافه خواهد شد. و سرور هم با دریافت هر بسته ابتدا اندیس رو بدست مباره و بعد مستقیم به اون اندیس مراجعه میکنه . که البته خوب میشه قبلش هم چک کرد که nil نباشه تا یهو خطا رخ نده .
    اینجوری دیگه یه حلقه For اجر نمیشه که در زمانن صرفه جویی میشه .
    بله ، حق با شماست . اما این روش خالی از مشکل هم نیست . به هر حال وقتی صحت عملیات سرور در گرو صحیح بودن Index هایی از طرف کلاینت ارسال میشند باشه امنیت کار پایین میاد و Index های ارسال شده از طرف کلاینت های غیر مجاز میتونه بطور کلی همه Transfer های جاری رو با مشکل مواجه کنه. البته این مورد حل شدنی هست و البته برای جلوگیری از اون مجدداً نیاز به یکسری تدابیر امنیتی هست که نهایتاً باعث میشه پردازش بالا بره .

    اگه راه بهتری پیدا کنیم که همه چیز به اراده سرور انجام بشه به نتیجه نهایی رسیدیم .

  12. #52

    نقل قول: ارسال فايل حجيم با indy

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

    البته من تا اینجایی که پیش روفتم به این شکله که یک شخص در ان واحد تنها میتونه یک فایل دریافت کنه .
    و هر کلاینت بتونه برای چند نفر ارسال کنه .
    از نظر کد نویسی هم پیاده سازی کردم این رو اما یه مشکلی هست اون هم این که زمانی که کلاینت داره فایلی رو ارسال میکنه برنامه کلاینت به یه حالت هنگ میره تا زمانی که ارسالش تمام بشه (فکر کنم اصطلاحش هم Freez باشه ، درسته؟)
    و همچنین زمانی که دو شخص یهش میگن فایل بفرست به شخص اول که پاسخ داده میشه برنامه به همون حالتی که گفتم میره و حتی درخواست های طرف ها رو هم نشون نمیده .

    یا مثلا حتی زمانی که داره فایل رو ارسال میکنه progressbar مربوط به اون هنگ میکنه . از رفرش هم استفاده کردم اما نشده .

    در این باره چی ؟


    البته این سوالم هم در باره ارسال فایله دیگه.(سوال اصلی همون یخ زدن برنامست)

  13. #53

    نقل قول: ارسال فايل حجيم با indy

    از کنترل IdAntiFreeze استفاده کنید . این کنترل مخصوص همین کار هست .
    آخرین ویرایش به وسیله مهران رسا : پنج شنبه 10 تیر 1389 در 00:11 صبح

  14. #54

    نقل قول: ارسال فايل حجيم با indy

    نقل قول نوشته شده توسط M8SPY مشاهده تاپیک
    از کنترل IdAntiFreeze استفاده کنید . این کنترل مخصوص همین کار هست .
    نکته اینجاست که استفاده کردم .
    فرمی که باز میشه تنها شامل یک IdTcpClient هست . و یکی هم از همین IdAntiFreeze ایا باید تنظیم خاصی براش انجام بدم ؟

    این کامپوننت رو باید به ازاری TcpSrver ها یگذاریم یا هم TcpServer , TcpClient ؟ یکی برای کل برنامه کافیه یا برای هم کدام یکی ؟

    ممنون.

  15. #55

    نقل قول: ارسال فايل حجيم با indy

    IdAntiFreeze در سمت کلاینت استفاده میشه .
    باید تنظیم خاصی براش انجام بدم ؟
    فقط روی فرم قرار بدید و Active رو برابر True قرار بدید . ضمناً برای اینکه برنامه کمترین حالت Freeze رو داشته باشه میتونید مقدار خاصیت IdleTimeOut رو کمتر کنید .

    یکی برای کل برنامه کافیه
    بله

  16. #56

    نقل قول: ارسال فايل حجيم با indy

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

  17. #57

    نقل قول: ارسال فايل حجيم با indy

    نقل قول نوشته شده توسط bmanfy مشاهده تاپیک
    خوب پس با این وجود من نکات اصلی رو رعایت کردم.
    پس چه دلیی میتونه داشته باشه ؟
    ما که کدی ندیدیم ! لطفاً نمونه برنامه ای که نوشتید رو قرار بدید تا بشه در موردش نظر داد .

  18. #58

    نقل قول: ارسال فايل حجيم با indy

    بسيار خوب.
    خود برنامه يك مقدار ميشه گفت كد زياد داره . يك نمونه كد در اولين فرصت اماده ميكن و قرار ميدم .
    البته بدم هم نمياد در باره برنامه اي كه نوشتم نظري بدين . بعد از اين كه كامل شد اون رو هم اينجا قرار ميدم .
    ممنون .

  19. #59

    نقل قول: ارسال فايل حجيم با indy

    سلام دوستان ، من تو برنامه ام میخواستم با استفاده از کامپوننت Indy فایل هامو send و recive کنم اما الان که دیدم اینقد سخت و ... بخیال شدم ، و با مراجعه به مخم و SQL سرور اینکارو انجام میدم مدیریت ترافیک و همروندیشم به عهده SSMS میافته
    یعنی جدولی می سازم رو دیتا بیس سرور و فایلهارو با کلاینها تو اون مینویسم بعد با یه برنامه رو سرور فایل هارو از روی دیتابیس ورمیدارم و خلاص ، برعکسش هم امکان پذیره
    منتظر نظر دوستان در مورد این روش هستم ؟؟؟؟؟؟؟؟؟

  20. #60

    نقل قول: ارسال فايل حجيم با indy

    نقل قول نوشته شده توسط Reza_A7b مشاهده تاپیک
    سلام دوستان ، من تو برنامه ام میخواستم با استفاده از کامپوننت Indy فایل هامو send و recive کنم اما الان که دیدم اینقد سخت و ... بخیال شدم ، و با مراجعه به مخم و SQL سرور اینکارو انجام میدم مدیریت ترافیک و همروندیشم به عهده SSMS میافته
    یعنی جدولی می سازم رو دیتا بیس سرور و فایلهارو با کلاینها تو اون مینویسم بعد با یه برنامه رو سرور فایل هارو از روی دیتابیس ورمیدارم و خلاص ، برعکسش هم امکان پذیره
    منتظر نظر دوستان در مورد این روش هستم ؟؟؟؟؟؟؟؟؟
    نظر چي ؟ اين كار از بنيان مشكل داره ٠٠٠

  21. #61

    نقل قول: ارسال فايل حجيم با indy

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


صفحه 2 از 2 اولاول 12

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •