نمایش نتایج 1 تا 31 از 31

نام تاپیک: ارسال فایل با IdTCPClient

  1. #1

    Red face ارسال فایل با IdTCPClient

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

  2. #2

    نقل قول: ارسال فایل با IdTCPClient

    نقل قول نوشته شده توسط sara66 مشاهده تاپیک
    نرم افزار کلاینت سرور باید بنویسم ، سرور یک آیپی ثابت داره و کلاینت کانکت میشه به سرور و کلاینت باید یک فایل برای سرور ارسال کنه ، میشه ؟
    قبلاً در این مورد بحث شده : (چند سانتی متر پایین تر) اگه سوالی بود در همون تاپیک مطرح کنید تا در موردش بحث کنیم .
    https://barnamenevis.org/showthread.php?t=228206

    موفق باشید

  3. #3

    نقل قول: ارسال فایل با IdTCPClient

    سوال من فرق میکنه
    برنامه کلاینت ( که IdTCPClient داره ) روی سیستم نصب میشه و آیپی سرور را بهش میدیم و وصل میشه به برنامه سرور ( که داره IdTCPServer )
    اما اینجا کلاینت به سرور درخواست نمیده که سرور در جوابش فایل بفرسته
    اینجا قراره نرم افزار کلاینت بعد از اینکه به سرور وصل شد یک فایل براش ارسال کنه همین

  4. #4

    نقل قول: ارسال فایل با IdTCPClient

    اینجا قراره نرم افزار کلاینت بعد از اینکه به سرور وصل شد یک فایل براش ارسال کنه همین
    فرقی نمیکنه، هر وقت کلاینت به سرور Connect شد، میتونه با استفاده از TIdTcpClient.IoHander.WriteFile، فایل را به سرور ارسال کنه، و سرور هم در رویداد OnExecute خودش با استفاده از AContext.Connection.IoHander.ReadStream فایل رو دریافت کنه.


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  5. #5

    نقل قول: ارسال فایل با IdTCPClient

    مرسی اینجوری ؟

    TIdTcpClient.IoHander.WriteFile('e:\em.jpg')

  6. #6

    نقل قول: ارسال فایل با IdTCPClient

    اینجوری ؟
    بله

    -------


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  7. #7

    نقل قول: ارسال فایل با IdTCPClient

    و تو سرور اینجوری ؟ اگه آره که کار نمی کنه

    s:=TMemoryStream.Create;
    try
    AContext.Connection.IOHandler.ReadStream(s);
    except
    ShowMessage('ٍError');
    end;

    s.SaveToFile('e:\ep.jpg');
    s.free

  8. #8

    نقل قول: ارسال فایل با IdTCPClient

    نقل قول نوشته شده توسط sara66 مشاهده تاپیک
    و تو سرور اینجوری ؟ اگه آره که کار نمی کنه

    s:=TMemoryStream.Create;
    try
    AContext.Connection.IOHandler.ReadStream(s);
    except
    ShowMessage('ٍError');
    end;

    s.SaveToFile('e:\ep.jpg');
    s.free
    اینجا دقیقاً داریم در مورد همین مشکل گفتگو میکنیم .

  9. #9

    نقل قول: ارسال فایل با IdTCPClient

    بعد از این دستور
    AContext.Connection.IOHandler.ReadStream(s);
    دیگه هیچی اجرا نمیشه

  10. #10

    نقل قول: ارسال فایل با IdTCPClient

    برنامه شما را که تو اون پست بود تغییر دادم نگاه کنید یکم عجیب نیست ؟؟؟؟؟؟؟؟؟؟
    توی رویداد OnExecute سرور :

    a:=a+1;
    Caption:=IntTostr(a);

    و a از نوع اینتجر ، توی آن کریت فرم هم مقدار 0 بهش دادم
    برنامه را اجرا کنید !!! بعد از کانکت شدن به سرور همینجوری مقدار کپشن زیاد میشه !!!
    یعنی این رویداد 24 ساعته فراخوانی میشه ؟!!!!

  11. #11

    نقل قول: ارسال فایل با IdTCPClient

    فعلا می تونید از IdCmdTcpServer به جای IdTcpServer استفاده کنید.


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  12. #12

    نقل قول: ارسال فایل با IdTCPClient

    نقل قول نوشته شده توسط علی کشاورز مشاهده تاپیک
    فعلا می تونید از IdCmdTcpServer به جای IdTcpServer استفاده کنید.
    یعنی IdTcpServer مشکل داره ؟

  13. #13

    نقل قول: ارسال فایل با IdTCPClient

    یعنی IdTcpServer مشکل داره ؟
    فعلا نمی دونم؛ ولی با IdCmdTcpServer و ایجاد یک Command برای دریافت فایل از کلاینت، قبلا کار کردم، و همچین مشکلی نداشت.


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  14. #14

    نقل قول: ارسال فایل با IdTCPClient

    idTCPClient هم باید عوض کنم ؟ برای IdCmdTcpServer بیشتر توضیح میدید که چجوری فایل را دریافت کنه ؟

  15. #15

    نقل قول: ارسال فایل با IdTCPClient

    idTCPClient هم باید عوض کنم ؟ برای IdCmdTcpServer بیشتر توضیح میدید که چجوری فایل را دریافت کنه ؟
    می تونید از همون IdTcpClient استفاده کنید، یا از IdCmdTcpClient استفاده کنید. نحوه دریافت فایل فرقی نمیکنه، فقط به جای اینکه در رویداد OnExecute سرور کد را بنویسید، یک Command جدید در IdCmdTcpServer ایجاد می کنید، و کد مربوط به دریافت فایل را در رویداد آن می نویسید. هر زمان که کلاینت همان Command را به سرور ارسال کنه، سرور آن کد را اجرا میکنه.


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  16. #16

    نقل قول: ارسال فایل با IdTCPClient

    procedure idCmdTCPServerCommandHandlers0Command(ASender: TIdCommand);


    به این گیر میده TIdCommand

  17. #17

    نقل قول: ارسال فایل با IdTCPClient

    به این گیر میده TIdCommand
    IdCommandHandlers را به لیست uses یونیت اضافه کنید.


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  18. #18

    نقل قول: ارسال فایل با IdTCPClient

    یک کامند ساختم اما این
    AContext.Connection.IOHandler.ReadStream(s);

    که تو رویداد کامند سرور نمیشه نوشت !

  19. #19

    نقل قول: ارسال فایل با IdTCPClient

    یک کامند ساختم اما این
    AContext.Connection.IOHandler.ReadStream(s);

    که تو رویداد کامند سرور نمیشه نوشت !
    اگر یک کم دقت کنید، میشه نوشت:
    ASender.Context.IOHander.ReadStream(S);


    در ضمن، قبل از استفاده از ReadStream، حتما پست زیر رو مطالعه کنید:
    http://www.barnamenevis.org/sh...4&postcount=15


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  20. #20

    نقل قول: ارسال فایل با IdTCPClient

    مرسی ، کلاینت این دستو را دادم

    TCPClinet.SendCmd('Test');
    TCPClinet.IOHandler.WriteFile('file.txt');
    سرور هم یک کامند تست داره که این کدشه



    procedure TForm1.TCPServerCommandHandlers0Command(ASender: TIdCommand);
    var
    s:TMemoryStream;
    begin
    s:=TMemoryStream.Create;
    ASender.Context.Connection.IOHandler.ReadStream(s) ;
    s.SaveToFile('e:\el.txt');
    s.Free;
    end;

    نمیشه گیر کردم

  21. #21

    نقل قول: ارسال فایل با IdTCPClient

    یکی کمک کنه چند روزه که درگیر همینم ! و برنامه لنگ مونده !!!!

  22. #22

    نقل قول: ارسال فایل با IdTCPClient

    مرسی ، کلاینت این دستو را دادم
    WriteFile اندازه فایل را قبل از ارسال فایل، به سرور ارسال نمیکنه، ReadStream هم منتظر دریافت اندازه فایل هست. شما می تونید اندازه فایل را به شکل های مختلفی به سرور ارسال کنید. یک حالتش اینه که با Command ارسالی، یک پارامتر هم ارسال کنید که حاوی اندازه فایل باشه. یک حالت دیگه اش اینه که قبل از فراخوانی WriteFile، با WriteInteger اندازه فایل را ارسال کنید. حالت دیگه اش هم این هست که شما از متد Write به جای WriteFile استفاده کنید. در این صورت، می تونید فایل رو به صورت Stream (با استفاده از TFileStream) به متد Write بدید، و مقدار پارامتر AWriteByteCount آن را True کنید:

    var
    Stream : TFileStream;
    begin
    Stream := TFileStream.Create(FileName, fmOpenRead, fmShareDenyWrite);
    try
    IdTCPClient1.IOHandler.Write(Stream,0,True);
    finally
    Stream.Free;
    end;
    end;


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  23. #23

    نقل قول: ارسال فایل با IdTCPClient

    مرسی
    اگر از write استفاده بشه سمت سرور توی رویداد OnExecute باید کد بنویسم یا کامند درست کنم و تونجا کد بنویسم ؟ از ReadStream استفاده کنم ؟
    اینجوری ؟

    var
    s:TFileStream;
    begin
    s:=TFileStream.Create('e:\1.jpg',fmCreate,fmOpenRe adWrite);
    ASender.Context.Connection.IOHandler.ReadStream(s) ;
    s.Free;
    end;




  24. #24

    نقل قول: ارسال فایل با IdTCPClient

    اگر از write استفاده بشه سمت سرور توی رویداد OnExecute باید کد بنویسم یا کامند درست کنم و تونجا کد بنویسم ؟ از ReadStream استفاده کنم ؟
    Command درست کنید، بهتر هست؛ چون رویداد OnExecute سرور دائما اجرا میشه، و کار خوبی نیست که هر وقت اون رویداد اجرا شد، همینطوری، بدون اینکه معلوم باشه درخواست اصلا چی بوده، یک Stream رو بخونید.
    همین کد بالا که نوشتید، در یک Command Handler در سمت سرور به خوبی کار میکنه، فقط دقت کنید که در کد بالا، نام فایل رو ثابت در نظر گرفتید. اگر دو یا چند کلاینت بخوان همزمان به این سرور فایل ارسال کنند، همه میخوان در همین فایل 1.jpg بنویسند، که طبیعی هست که مشکل پیش میاد! باید یا برای هر کلاینت نام فایل هایی خودتون تولید کنید، یا اینکه نام فایل را به عنوان پارامتر از کلاینت بگیرید، و فایلی با همون نام در سمت سرور ایجاد کنید.


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  25. #25

    نقل قول: ارسال فایل با IdTCPClient

    مرســـــــــــــــــی کار کرد نام فایل را بفرستم ؟ اینجوری ؟
    IdTCPClient1.SendCmd('Test','22.jpg');


    بعد سمت سرور چی ؟ میشه این 22.jpg را تشخیص داد ؟

  26. #26

    نقل قول: ارسال فایل با IdTCPClient

    بعد سمت سرور چی ؟ میشه این 22.jpg را تشخیص داد ؟
    از طریق خصوصیت Params مربوط به ASender در رویداد مربوط به اون Command Handler.


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  27. #27

    نقل قول: ارسال فایل با IdTCPClient

    مرسی.ASender.Params.Text این را نوشتم خطا میده ! موقع ارسال تو کلاینت بعد از ارسال کامند یک Writeln نوشتم و تو سرور قبل از readStream یک Readln نوشتم و نام فایل را اینجوری خوندم خوبه ؟ یا بهتره اینجوری باشه ؟ :
    IdTCPClient1.SendCmd('Test','22.jpg');

    اینجوری سمت سرور نمیشه گرفتش

  28. #28

    نقل قول: ارسال فایل با IdTCPClient

    مرسی.ASender.Params.Text این را نوشتم خطا میده !
    Params یک لیسته، هر کدام از پارامترها به عنوان یکی از آیتم های این لیست هستند، که می تونید به هر کدامشون دسترسی داشته باشید، مثلا برای دریافت پارامتر اول، می تونید بنویسید:
    ASender.Params[0];


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  29. #29

    نقل قول: ارسال فایل با IdTCPClient

    مرسی اول من همین کد نوشتم،اما خطا میده
    این سمت کلاینت

    IdTCPClient1.SendCmd('Test','1.jpg');


    این هم سمت سرور و داخل رویداد کامند test

    s:=ASender.Params[0];


    و این هم خطا ها ! بعد ازاین 2 خطا برنامه پیغام میده "Welcome" !!!!
    عکس های ضمیمه عکس های ضمیمه
    • نوع فایل: jpg 1.JPG‏ (14.8 کیلوبایت, 21 دیدار)
    • نوع فایل: jpg 2.JPG‏ (15.3 کیلوبایت, 20 دیدار)

  30. #30

    نقل قول: ارسال فایل با IdTCPClient

    مرسی اول من همین کد نوشتم،اما خطا میده
    اون چیزی که نوشتید صحیح نیست!

    شما در SendCmd، به جای Response، نام فایل را نوشتید، نه به عنوان پارامتر اون دستور!

    شما در سمت سرور، باید نام Command و جدا کننده نام دستور از پارامترها، و جدا کننده پارامترها از هم را تعیین کنید.
    در لیست CommandHandlers سرور، Command مربوطه رو انتخاب کنید، و در کادر مربوط به خصوصیت Command، اسم دستور را بنویسید (مثلا همان Test). برای خصوصیت ParamDelimiter هم یک مقدار غیر از 32# بنویسید (مثلا کارکتر کاما ,).

    سپس در سمت کلاینت، با توجه به همان تنظیماتی که انجام دادید، دستور را به سرور ارسال کنید. در مثال بالا، ما دستور را Test تعریف کردیم. جدا کننده دستور از پارامترها Space هست، و جدا کننده پارامترها از هم کارکتر کاما، پس ما هم SendCmd را با توجه به این مقادیر می نویسیم، مثلا به این شکل:

    SendCmd('Test Param1,Param2,Param3');
    این کد دستور Test رو با سه پارامتر تعیین شده ارسال میکنه. کل دستور و پارامترهاش به عنوان یک رشته به SendCmd ارسال میشند، نه به عنوان پارامترهای جداگانه. شما به عنوان پارامترهای SendCmd دقت نکردید.


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  31. #31

    نقل قول: ارسال فایل با IdTCPClient

    مرسی درست شد

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

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