Page 2 of 2 FirstFirst 1 2
Results 16 to 25 of 25

Thread: Client Server verbinding, Hoe Bestand versturen ?

  1. #16
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Largestream vziw is 64-bit integer voor size.

  2. #17
    Ik ben eerst eens een stuk terug gegaan, nu kan ik weer een verbinding maken tussen de Server en de Client.

    Aan de Server zijde heb ik dit:
    Code:
    procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
    var
     Port          : Integer;
     PeerPort      : Integer;
     PeerIP        : string;
     msgFromClient : string;
     msgToClient   : string;
     Received: String; 
     ms:TMemoryStream;
    
    begin
    
      Memo1.Lines.Add('Test 1');
    
      try
        ms:=TMemoryStream.Create;
        AContext.Connection.IOHandler.ReadStream(ms,-1,false);
    
        Memo1.Lines.Add('Test 2');
    
        //ms.SaveToFile('c:\networked.bmp');
        ms.SaveToFile('C:\=== DATA ===\TEST.jpg');
    
      except
        //LogMessage('Failed to receive',clred);
        Memo1.Lines.Add('Test 3');
    
        Memo1.Lines.Add( 'Failed to receive'  );
      end;
    
    end;
    En aan de Client zijde dit:
    Code:
    procedure TForm1.Button3Click(Sender: TObject);
    var
      FileName: string;
      Strm: TStream;
    begin
      FileName := 'C:\=== DATA ===\20190925_155655_001.jpg';
    
      Strm := TFileStream.Create(FileName, fmOpenWrite);
    
      try
        try
         IdTCPClient1.IOHandler.Write(TStream(Strm), 0, True);
    
        finally
          Strm.Free;
        end;
      except
        //raise;  //Verhogen ???
        Memo1.Lines.Add('Ok 1');
      end;
    
    end;
    Als ik op Button3 klik dan krijg ik de melding: Ok 1
    Maar aan de Server zijde niets.
    Waarom zou de procedure IdTCPServer1Execute niet gestart worden ?

    Als ik de verbinding verbreek, dan krijg ik:
    Test 3
    Failed to receive

  3. #18
    WAAROM fmOpenWrite ????

    fmOpenWrite
    Open the file for writing only. Writing to the file completely replaces the current contents.

  4. #19
    Ik dacht dit bestand moet geschreven worden naar de Client, maar heb dit nu gewijzigd naar fmOpenRead, en nu wordt het bestand blijkbaar verzonden (de Client/Server draait als test op dezelfde PC).
    Er staat nu een bestand met de naam TEST.jpg op de Harddisk.
    Kan ik deze opzet nu gebruiken voor zowel grote als ook kleine bestanden, en moet ik nog iets toevoegen om het betrouwbaar werkend te krijgen ?

  5. #20
    Quote Originally Posted by MMSoft View Post
    Ik dacht dit bestand moet geschreven worden naar de Client,
    Het 'schrijven' (dus verzenden) naar de client doe je door die iohandler.write. Bij het openen van het origineel bestand wil je daaruit natuurlijk alleen LEZEN aan de server kant.

    Voor hele grote bestanden (groter dan 2,147,483,647 bytes, 2GB dus ) zou je aan beide kanten Largestream op true moeten zetten. Maar in dat geval lijkt mij een custom procedure met progressbalk wel handiger.

    Hoe betrouwbaar dit allemaal is weet ik niet (geen ervaring mee).

  6. #21
    procedure met progressbalk
    Die wil ik er natuurlijk ook graag bij hebben.
    Op dit moment ben ik druk bezig om een verbinding te krijgen met een Android apparaat. Dat heeft gewerkt, maar nu wil dit even niet (iets met teveel test versies).

    Edit:
    Ik heb inmiddels ook een App werkend die het bestand kan ontvangen.

    Hoe kan ik de naam van het verzonden bestand uitlezen zodat ik het Ontvangen bestand op kan slaan met dezelfde naam ?
    Last edited by MMSoft; 11-Jul-21 at 20:40.

  7. #22
    Ik zet de naam van het bestand in de stream voor het bestand en lees eerst deze naam uit, dat lijkt betrouwbaar te werken.

    Ik zou alleen nog graag weten wanneer het bestand verstuurd en ontvangen is, zodat ik het volgende kan versturen.
    Stel dat ik 40 foto's over wil zenden, mag ik die dan ongecontroleerd achter elkaar verzenden, of moet ik wachten op een signaal van de Server ?

  8. #23
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,708
    Is er een specifieke reden dat je je eigen protocol probeert te maken en niet een kant en klare gebruikt (FTP, HTTP, ...) voor bestandsoverdracht of is dit gewoon een vingeroefening?
    TMemoryLeak.Create(Nil);

  9. #24
    Ik weet te weinig van deze materie om zelf een protocol op te kunnen zetten.
    Het enige dat ik wil en nodig heb is een mogelijkheid om betrouwbaar meerdere bestanden over te kunnen zenden.
    Ben ik zo goed bezig, of is er een betere/eenvoudigere manier voor mijn doel ?

  10. #25
    Ik heb inmiddels 4 App's gemaakt om bestanden van en naar Windows en/of Android te zenden.
    50 Foto's gaat zonder problemen. Er zitten nog wel een paar kleine bugjes in maar de App's, maar deze zijn alvast
    bruikbaar voor mij.

    Iedereen die meegedacht heeft bedankt, en op en of aanmerkingen blijven welkom.

Page 2 of 2 FirstFirst 1 2

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •