HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Fájl letöltése az internetről a ClientSocket segítségével


Példaprogram letöltése

4286 bájt

Az interneten böngészve számtalan alkalommal adódik, hogy egy-egy fájlt le kell töltenünk egy adott helyről. Mai cikkünkben annak járunk utána, hogy egy Delphi programból, a ClientSocket komponens segítségével mindezt hogyan is tehetjük meg. Hasznos lehet mindazok számára, akik például programukhoz állandó frissítést biztosítanak az interneten keresztül, amit egy megadott tárhelyről kell a felhasználóknak letölteni. Ez a funkció akár automatizálható is, hiszen a bemutatásra kerülő programban megadható, hogy honnan és hová szeretnénk az adatlementést végezni.

Készítsünk hát egy függvényt, mely négy paramétert vár bemeneti értékként. Ezek sorban a következők: a távoli kiszolgáló neve, a távoli fájl elérési útvonala, annak a helyi fájlnak az elérési útvonala, melybe az adatmentést szeretnénk végezni, valamint a kapcsolat felépítéséhez szükséges ClientSocket komponens neve. Lássuk a függvény felépítését:
procedure DownloadFile(strHost, strRemoteFileName, strLocalFileName: string;
 ClientSocket: TClientSocket);
var
  intReturnCode: Integer;
  s: string;
  szBuffer: array[0..128] of Char;
  FileOut: TFileStream;
Begin
Megvizsgáljuk, hogy a távoli fájl elérési útvonala „/” jellel kezdődik-e. Amennyiben nem, beszúrjuk azt a fájlnév elé.
  if strRemoteFileName[1] <> '/' then
    strRemoteFileName:= '/' + strRemoteFileName;
Létrehozunk egy FileOut nevű TFileStream típusú változót, melynek segítségével létrehozzuk a helyi kimeneti fájlunkat.
  FileOut:=TFileStream.Create(strLocalFileName, fmCreate);
  try
A ClientSocket számára átadjuk a strHost paraméterben kapott távoli kiszolgáló nevét, majd a GET paranccsal egy kérést küldünk felé a megadott fájl elérésére.
    with ClientSocket do
    begin
      Host:=strHost;
      ClientType:=ctBlocking;
      Port:=80;
      try
        Open;
Az s szöveges változóban összeállítjuk a kérésünket.
        s := 'GET ' + strRemoteFileName + '   HTTP/1.0'#13#10 +
             'Host: ' + strHost + #13#10#13#10;
Az intReturnCode változóban eltároljuk a Socket küldendő adatokat tartalmazó bufferének méretét.
        intReturnCode:=Socket.SendBuf(Pointer(s)^, Length(s));
        if intReturnCode > 0 then
        begin
Mindaddig fogadjuk a választ mindaddig, míg adat érkezik.
          while (intReturnCode > 0) do
          begin
Időnként kiürítjük az szBuffer karakter típusú tömböt, ugyanis az 128 karaktert képes csak tárolni.
            FillChar(szBuffer, SizeOf(szBuffer), 0);
Az intReturnCode változónak átadjuk a Socket beérkező adatokat tartalmazó bufferének méretét. Ez lesz egyben a létrehozandó helyi fájlunk mérete is.
            intReturnCode:=Socket.ReceiveBuf(szBuffer, SizeOf(szBuffer));
A beérkezett adatokat kiírjuk a helyi fájlba.
            if intReturnCode > 0 then
              FileOut.Write(szBuffer, intReturnCode);
          end
        end
        else
          MessageDlg('A szervertől nem érkezett válasz!', mtError, [mbOk], 0);
Az adatok fogadása után lezárjuk a kapcsolatot.
        Close;
      except
        MessageDlg('Nincs kapcsolat!', mtError, [mbOk], 0);
      end;
    end;
  finally
Végül felszabadítjuk a FileOut stream-et.
    FileOut.Free
  end;
end;
A mellékelt példaprogramban a Download gomb megnyomására meghívjuk a fenti függvényt. A bemeneti paramétereket egy-egy Edit ablakban tároljuk.
procedure TForm1.Button1Click(Sender: TObject);
begin
  try
    DownloadFile(Edit1.Text, Edit2.text, Edit3.Text, ClientSocket1);
    ShowMessage('A letöltés befejeződött!');
  except on ESocketError do
    ShowMessage('A letöltés sikertelen volt!');
  end;
end;

Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2003 évkönyv 525. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |