Delphi 7 + Indy 10 Przykłady prostych aplikacji sieciowych



Podobne dokumenty
PROGRAM: WYSZUKANIE LICZBY MAKSYMALNEJ

SZYBKI START. Tworzenie nowego połączenia w celu zaszyfrowania/odszyfrowania danych lub tekstu 2. Szyfrowanie/odszyfrowanie danych 4

Nazwa implementacji: Kółko i krzyżyk w Lazarusie. Autor: Piotr Fiorek Andrzej Stefaniuk

Instrukcja obsługi serwera FTP v

Tworzenie własnych komponentów

Konfiguracja współpracy urządzeń mobilnych (bonowników).

Obsługa grafiki w Delphi, rysowanie na płótnie, obsługa myszki, zapisywanie obrazków do plików, bitmapy pozaekranowe.

NetDrive czyli jak w prosty sposób zarządzać zawartością FTP

Brinet sp. z o.o. wyłączny przedstawiciel DrayTek w Polsce

PORADNIK KORZYSTANIA Z SERWERA FTP ftp.architekturaibiznes.com.pl

Instalacja i konfiguracja Symfonia.Common.Server oraz Symfonia.Common.Forte

Aktualizacja systemu UPLOOK / STATLOOK

Poradnik korzystania z usługi FTP

Brinet sp. z o.o. wyłączny przedstawiciel DrayTek w Polsce

11. Rozwiązywanie problemów

INSTRUKCJA OTWARCIA RACHUNKU ALIOR TRADER DLA KLIENTÓW ALIOR BANKU

SERWER AKTUALIZACJI UpServ

SERWER AKTUALIZACJI UpServ

Jak zainstalować i skonfigurować komunikator MIRANDA, aby wyglądał i funkcjonował jak Gadu Gadu Tutorial by t800.

INSTRUKCJA INSTALACJI I OBSŁUGI ZBIORCZE E-DEKLARCJE. dla Kadr Plac i ZUS PRO

Instrukcja dla programu Ocena.XP

SERWER AKTUALIZACJI UpServ

Materiały oryginalne: ZAWWW-2st1.2-l11.tresc-1.0kolor.pdf. Materiały poprawione

Kierunek: ETI Przedmiot: Programowanie w środowisku RAD - Delphi Rok III Semestr 5. Ćwiczenie 5 Aplikacja wielo-okienkowa

Delphi Laboratorium 3

Ćwiczenie 1. Kolejki IBM Message Queue (MQ)

Wireshark analizator ruchu sieciowego

Wdrożenie modułu płatności eservice. dla systemu Zen Cart

OPERACJE NA PLIKACH. Podstawowe pojęcia:

Program dla praktyki lekarskiej

Program dla praktyki lekarskiej. Instrukcja Aktualizacji

Instalacja programu dreryk

Współpraca z platformą Emp@tia. dokumentacja techniczna

Instrukcja obsługi programu

5.6.2 Laboratorium: Punkty przywracania

Opis implementacji: Implementacja przedstawia Grę w życie jako przykład prostej symulacji opartej na automatach.

Po uruchomieniu Lazarusa należy wybrać z paska górnego opcję Projekt i następnie Nowy Projekt. Pokaże się okno:

Tworzenie pliku źródłowego w aplikacji POLTAX2B.

Wprowadzenie do systemu Delphi

Wykaz zmian w programie SysLoger

Laboratorium - Używanie programu Wireshark do obserwacji mechanizmu uzgodnienia trójetapowego TCP

INSTRUKCJA OTWARCIA RACHUNKU ALIOR TRADER PRZEZ INTERNET

Zamawianie Taxi Aktywator Instrukcja użytkownika

Tak przygotowane pliki należy umieścić w głównym folderze naszego programu. Klub IKS

Laboratorium - Poznawanie FTP

Oprogramowanie OpenVPN jest oprogramowaniem darmowym, które można pobrać ze strony:

Delphi podstawy programowania. Rejestr systemowy

Wdrożenie modułu płatności eservice. dla systemu oscommerce 2.3.x

Windows Server 2008 Standard Str. 1 Ćwiczenia. Opr. JK. I. Instalowanie serwera FTP w Windows Server 2008 (zrzuty ekranowe z maszyny wirtualnej)

1. Proszę wejść na stronę: poczta.home.pl i zalogować się do nowej skrzynki za pomocą otrzymanych danych.

Instalacja i konfiguracja IIS-a na potrzeby dostępu WEB do aplikacji Wonderware InTouch Machine Edition

Brinet sp. z o.o. wyłączny przedstawiciel DrayTek w Polsce

2014 Electronics For Imaging. Informacje zawarte w niniejszej publikacji podlegają postanowieniom opisanym w dokumencie Uwagi prawne dotyczącym tego

Język programowania PASCAL

Instrukcja użytkownika. Aplikacja dla Comarch Optima

Niniejszy ebook jest własnością prywatną.

Instrukcja instalacji Control Expert 3.0

Wykład 7: Lazarus GUI

Fiery Remote Scan. Uruchamianie programu Fiery Remote Scan. Skrzynki pocztowe

Uwaga!!! Autentykacja LDAP/AD zaimplementowana w Vigor wspiera tylko proste uwierzytelnianie (hasło przesyłane jest jawnym tekstem).

Połączenie VPN aplikacji SSL. 1. Konfiguracja serwera VPN 1.1. Ustawienia ogólne 1.2. Profile aplikacji SSL 1.3. Konto SSL 1.4. Grupa użytkowników

Kierunek: ETI Przedmiot: Programowanie w środowisku RAD - Delphi Rok III Semestr 5

Instrukcja dla instalatora systemu SMDP Enterprise/Professional

5.1. MINIPOS MINIPOS. INSTALACJA ORAZ URUCHOMIENIE USŁUGI

Fiery Remote Scan. Łączenie z serwerami Fiery servers. Łączenie z serwerem Fiery server przy pierwszym użyciu

PORADNIK DLA UŻYTKOWNIKA

Bezpieczny system poczty elektronicznej

INSTALACJA I KONFIGURACJA Instalacja systemu WF-Mag Mobile 2

Programowanie RAD Delphi

Synchronizator plików (SSC) - dokumentacja

Połączenie VPN Host-LAN SSL z wykorzystaniem przeglądarki. 1. Konfiguracja serwera VPN 1.1. Ustawienia ogólne 1.2. Konto SSL 1.3. Grupa użytkowników

1. Wybierz File New Application. Pojawi się nowa aplikacja w Delphi.

PC0060. ADAPTER Kabel Easy Copy PC-Link USB 2.0 Proste kopiowanie, bez instalacji. Instrukcja obsługi

Instrukcja instalacji połączenia sterownika PL11-MUT24 ze stroną internetową.

11. Autoryzacja użytkowników

Aplikacje WWW - laboratorium

Połączenie VPN Host-LAN SSL z wykorzystaniem DrayTek Smart VPN Client. 1. Konfiguracja serwera VPN 1.1. Ustawienia ogólne 1.2.

BIT S.A. BIT Rejestry. Instrukcja instalacji. Wersja 3

Przewodnik instalacji i rozpoczynania pracy. dla DataPage+ 2012

Wysyłka wniosko w ZUS - EKS. Instrukcja użytkownika aplikacji Wysyłka wniosków ZUS EKS

Instrukcja obsługi aplikacji Karty Pojazdów dla Dealerów Samochodowych

Snifery wbudowane w Microsoft Windows

Instrukcja EQU Kantech

1 Moduł Diagnostyki Sieci

1. Pobieranie i instalacja FotoSendera

Laboratorium 15: Bazy Danych Tworzenie bazy danych i programowanie elementów nawigacyjnych aplikacji stworzonej przy pomocy technologii dbexpress

Konfiguracja vsftpd ( Very Secure FTP Server )

Instrukcja użytkownika. Aplikacja dla Comarch Optima

Instrukcja inteligentnego gniazda Wi-Fi współpracującego z systemem Asystent. domowy

Budowa aplikacji z graficznym interfejsem użytkownika - GUI (Graphic User Interface)

Delphi podstawy programowania. Pliki INI

SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE. Tryb konsolowy ćwiczenie b

Cel: Przypisujemy przyciskom określone funkcje panel górny (Panel1)

Git, Bitbucket, IntelliJ IDEA

Wykład 03 JavaScript. Michał Drabik

Instrukcja użytkownika. Aplikacja dla Comarch ERP XL

S P I S T R E Ś C I. Instrukcja obsługi

Instrukcja użytkownika. Aplikacja dla WF-Mag

INSTRUKCJA INSTALACJI SYSTEMU

Windows W celu dostępu do i konfiguracji firewall idź do Panelu sterowania -> System i zabezpieczenia -> Zapora systemu Windows.

Transkrypt:

Jacek Matulewski, Sławek Orłowski http://www.phys.uni.torun.pl/~jacek/ Delphi 7 + Indy 10 Przykłady prostych aplikacji sieciowych Wersja α Ćwiczenia Toruń, 20 grudnia 2005 Najnowsza wersja tego dokumentu znajduje się pod adresem http://www.phys.uni.torun.pl/~jacek/dydaktyka/rad/rad4_indy_delphi.pdf Źródła opisanych w tym dokumencie programów znajdują się pod adresem http://www.phys.uni.torun.pl/~jacek/dydaktyka/rad/rad4_indy.zip

Spis treści Spis treści 2 Porty TCP. Skanowanie portów 3 Ćwiczenie 1 TCP - WWW 3 Ćwiczenie 2 Obsługa wyjątków 3 Ćwiczenie 3 Skanowanie portów 3 Klient FTP 5 Ćwiczenie 4 Klient FTP przyczółek 5 Ćwiczenie 5 Dodać obsługę błędów do metody Button1Click 6 Ćwiczenie 6 (samodzielne) Klient FTP sprawdzanie przy zamknięciu aplikacji, czy połączenie aktywne (pytanie o rozłączenie) 6 Ćwiczenie 7 Pobieranie listy plików polecenie LIST metoda TIdFTP.List 6 Ćwiczenie 8 Parserowanie listy plików 7 Ćwiczenie 9 Eksploracja serwera zmiana bieżącego katalogu 8 Ćwiczenie 10 Przejście do katalogu nadrzędnego 9 Ćwiczenie 11 Pobieranie zaznaczonego pliku 9 Ćwiczenie 12 Ściąganie po dwukrotnym kliknięciu myszą listy 10 Ćwiczenie 13 Odświeżanie formy podczas pracy 11 Ćwiczenie 14 Wysyłanie pliku 11 Ćwiczenie 15 Kasowanie pliku z serwera 12 Ćwiczenie 16 Tworzenie katalogów na serwerze 12 Ćwiczenie 17 Kasowanie katalogów na serwerze 13 Inne 13 Ćwiczenie 18 Pobieranie plików przez HTTP 13 Ćwiczenie 19 PING 14

Porty TCP. Skanowanie portów Ćwiczenie 1 TCP - WWW 1. Zakładka IndyClients 2. Na formę: IdTCPClient a) Host = www.helion.pl b) Port = 80 3. Na formę: TButton 4. Domyślna metoda zdarzeniowa: procedure TForm1.Button1Click(Sender: TObject); IdTCPClient1.Connect; ShowMessage('Połączony'); IdTCPClient1.Disconnect; ShowMessage('Rozłączony'); W przypadku przechwycenia wyjątku pojawi się okno z prośbą o wskazanie modułu klasy wyjątku (np. IdException.pas), który znajduje się w katalogu instalacyjnym Indy 10 for Delphi (np. C:\Program Files\Indy 10 for Delphi\Source\System\IdException.pas). Warto zaznaczyć opcję Add directory to Debug Source Path. Ćwiczenie 2 Obsługa wyjątków 1. Dodajemy do uses: IdException. 2. Zmieniamy metodę zdarzeniową: procedure TForm1.Button1Click(Sender: TObject); IdTCPClient1.Connect; ShowMessage('Połączony'); IdTCPClient1.Disconnect; ShowMessage('Rozłączony'); on e :EIdException do ShowMessage('Błąd Indy: '+e.message); Ćwiczenie 3 Skanowanie portów 1. Nowy projekt

2. Do formy dodajemy IdTCPClient a) ConnectTimeout = 3000 (3 sekundy) 3. Do formy dodajemy TEdit a) Text = www.helion.pl 4. Dodajemy TListBox 5. Dodajemy przycisk TButton a) Caption = Połącz 6. Domyślna metoda zdarzeniowa procedure TForm1.Button1Click(Sender: TObject); const porty :array[0..20] of Integer = (7,20,21,22,23,25,53,79,80,110,117,137,143,161,220,443,531,1550,6000,8080,8888); protokoly :array[0..20] of String = ('echo','ftpdata','ftp','ssh','telnet','smtp','dns','finger','http','pop3','uucp','netbios','imap',' snmp','imap3','ssl','irc','gg','x11','http-proxy','napster'); var i :Integer; Edit1.Enabled:=False; Button1.Enabled:=False; ListBox1.Items.Clear(); ListBox1.Items.Add('Sprawdzam porty komputera '+Edit1.Text); ListBox1.Items.Add('Liczba portów: '+IntToStr(Length(porty))); ListBox1.Items.Add('Skanowanie może potrwać dłuższą chwilę!'); for i:=0 to Length(porty)-1 do Self.Refresh; IdTCPClient1.Host:=Edit1.Text; IdTCPClient1.Port:=porty[i]; IdTCPClient1.Connect(); IdTCPClient1.Disconnect(); ListBox1.Items.Add('Port '+IntToStr(porty[i])+' ('+protokoly[i]+') jest otwarty'); on ex :EIdException do ListBox1.Items.Add('Port '+IntToStr(porty[i])+' ('+protokoly[i]+') jest zamknięty ('+ex.message+')'); ListBox1.ItemIndex:=ListBox1.Items.Count-1; ListBox1.Items.Add('Skanowanie zakończone.'); ListBox1.ItemIndex:=ListBox1.Items.Count-1;

Edit1.Enabled:=True; Button1.Enabled:=True; Program należy uruchomić poza środowiskiem Delphi (albo bez debugowania), aby zapobiec przechwytywaniu wyjątków przez wbudowany debugger. Klient FTP Ćwiczenie 4 Klient FTP przyczółek Ideologia FTP (2 x TCP). Tryb aktywny i pasywny 1. Nowy projekt 2. Do formy dodajemy IdFTP z zakładki Indy Clients. a) Host = sunsite.icm.edu.pl b) TransferType = ttbinary c) Username = anonymous 3. Do formy dodajemy przycisk TButton a) Caption = Połącz 4. Domyślna metoda zdarzeniowa procedure TForm1.Button1Click(Sender: TObject); IdFTP1.Connect; ShowMessage('Połączony z '+IdFTP1.Username+'@'+IdFTP1.Host+'!'+#13+ 'Katalog: '+IdFTP1.RetrieveCurrentDir); Caption:=IdFTP1.Username+'@'+IdFTP1.Host; 5. Zmiana IdFTP1.Passive = True!!! (w zależności od ustawień lokalnego firewalla bez Passive może nie udać się nawiązać połączenia) 6. Przycisk Button2 a) Caption = Rozłącz 7. Domyślna metoda zdarzeniowa procedure TForm1.Button2Click(Sender: TObject); IdFTP1.Disconnect; ShowMessage('Rozłączony!'); Caption:='Rozłączony'; Do tej pory połączenie jedynie na porcie 21 (żadne dane nie zostały przesłane).

Ćwiczenie 5 Dodać obsługę błędów do metody Button1Click Modyfikujemy metodę Button1Click: procedure TForm1.Button1Click(Sender: TObject); IdFTP1.Connect; ShowMessage('Połączony z '+IdFTP1.Username+'@'+IdFTP1.Host+'!'+#13+'Katalog: '+IdFTP1.RetrieveCurrentDir); Caption:=IdFTP1.Username+'@'+IdFTP1.Host; on E: Exception do MessageBox(Handle,'Błąd przy próbie połączenia','błąd',mb_ok+mb_iconerror); Ćwiczenie 6 (samodzielne) Klient FTP sprawdzanie przy zamknięciu aplikacji, czy połączenie aktywne (pytanie o rozłączenie) Tworzymy metodę zdarzeniową do zdarzenia CloseQuery formy: procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); if IdFTP1.Connected then if MessageBox(Handle,'Połączenie z serwerem jest aktywne.'+#13+'kliknięcie OK spowoduje jego zamknięcie i zakończenie działania aplikacji.','uwaga!',mb_okcancel+mb_iconwarning)=id_ok then Button2Click(Sender) else CanClose:=False; Ćwiczenie 7 Pobieranie listy plików polecenie LIST metoda TIdFTP.List 1. Do formy dodajemy listę TListBox 2. Do formy dodajemy przycisk TButton a) Caption = Zawartość katalogu 3. Domyślna metoda zdarzeniowa: procedure TForm1.Button3Click(Sender: TObject);

IdFTP1.List(ListBox1.Items); 4. Przeciążona wersje metody List: IdFTP1.List(ListBox1.Items,'',False);. Ćwiczenie 8 Parserowanie listy plików 1. Dodajemy nowy przycisk a) Caption = Zawartość katalogu (parser) 2. Do uses dodajemy IdFTPList (są tam: klasa TIdDirItemType i stałe ditfile, ditdirectory i ditsymboliclink, ditsymboliclinkdir);. 3. Do sekcji type modułu dodajemy definicje typu wyliczeniowego oraz struktury mogącej przechowywać informacje o pozycjach w katalogu: type TTypElementu = (teplik, tekatalog, telink); TElementKatalogu = record Nazwa :String; Typ :TTypElementu; 4. W deklaracji klasy umieszczamy pole dynamiczną tablicę dla zdefiniowanego powyżej typu: private ZawartoscKatalogu :array of TElementKatalogu; 5. Domyślna metoda zdarzeniowa: procedure TForm1.Button4Click(Sender: TObject); const pozycja=47; var i,l :Integer; s :String; katalog,link :Boolean; element :TElementKatalogu; ListBox1.Clear; SetLength(ZawartoscKatalogu,0); IdFTP1.List('.',True); //biezący katalog //Wlasny parser do sunsite for i:=1 to IdFTP1.ListResult.Count-1 do s:=idftp1.listresult[i]; katalog:=(s[1]='d');

link:=(s[1]='l'); s:=copy(s,pozycja+1,length(s)-pozycja); //usuwanie informacji s:=trim(s); //na wszelki wypadek if Pos('->',s)>0 then s:=copy(s,1,pos('->',s)-2); l:=length(zawartosckatalogu); SetLength(ZawartoscKatalogu,l+1); element.nazwa:=s; element.typ:=teplik; if katalog then s:='['+s+']'; element.typ:=tekatalog; if link then s:=s+'->'; element.typ:=telink; ZawartoscKatalogu[l]:=element; ListBox1.Items.Add(s); Caption:=IdFTP1.Username+'@'+IdFTP1.Host+' Katalog: '+IdFTP1.RetrieveCurrentDir; Parser wbudowany (w Indy10 dla Win32 nie działa!) ShowMessage('Ilość elementów w katalogu: '+IntToStr(IdFTP1.DirectoryListing.Count)); for i:=0 to IdFTP1.DirectoryListing.Count-1 do s:=idftp1.directorylisting.items[i].filename; case IdFTP1.DirectoryListing.Items[i].ItemType of ditfile: s:=s+' '+IntToStr(IdFTP1.DirectoryListing.Items[i].Size); ditdirectory: s:='['+s+']'; ditsymboliclink,ditsymboliclinkdir: s:=s+'->'; ListBox1.Items.Add(s); Ćwiczenie 9 Eksploracja serwera zmiana bieżącego katalogu Zareagujemy na kliknięcie listy. Tworzymy metodę do OnDblClick: procedure TForm1.ListBox1DblClick(Sender: TObject); var pozycja :Integer;

pozycja:=listbox1.itemindex; //ShowMessage(IntToStr(pozycja)+' - '+ZawartoscKatalogu[pozycja].Nazwa); case ZawartoscKatalogu[pozycja].Typ of tekatalog,telink: IdFTP1.ChangeDir(ZawartoscKatalogu[pozycja].Nazwa); Button4Click(Sender); on E :Exception do MessageBox(Handle,PChar('Nie udało się zmienić katalogu ('+E.Message+')'),'Błąd',MB_OK+MB_ICONERROR); Ćwiczenie 10 Przejście do katalogu nadrzędnego 1. Do formy dodajemy przycisk. 2. Zmieniamy jego etykietę na Katalog nadrzędny. 3. Tworzymy domyślny metodę nadrzędną: procedure TForm1.Button5Click(Sender: TObject); IdFTP1.ChangeDirUp; Button4Click(Sender); Ćwiczenie 11 Pobieranie zaznaczonego pliku 1. Na formie umieszczamy komponent TSaveDialog. 2. Ustalamy jego własności a) Title := Wybierz położenie ściąganego pliku b) Options.ofOverwritePrompt := True 3. Dodajemy przycisk. 4. Zmieniamy jego etykietę na Pobierz zaznaczony plik... 5. Tworzymy metodę zdarzeniową: procedure TForm1.Button6Click(Sender: TObject); var pozycja :Integer;

pozycja:=listbox1.itemindex; if (pozycja<0) and not (ZawartoscKatalogu[pozycja].Typ=tePlik) then SaveDialog1.FileName:=ZawartoscKatalogu[pozycja].Nazwa; if SaveDialog1.Execute then IdFTP1.Get(ZawartoscKatalogu[pozycja].Nazwa,SaveDialog1.FileName,True,False); ShowMessage('Pobieranie pliku zakończone'); on E :Exception do MessageBox(Handle,PChar('Nie udało się pobrać pliku ('+E.Message+')'),'Błąd',MB_OK+MB_ICONERROR); Ćwiczenie 12 Ściąganie po dwukrotnym kliknięciu myszą listy Uzupełniamy metodę ListBox1DblClick: procedure TForm1.ListBox1DblClick(Sender: TObject); var pozycja :Integer; pozycja:=listbox1.itemindex; //ShowMessage(IntToStr(pozycja)+' - '+ZawartoscKatalogu[pozycja].Nazwa); case ZawartoscKatalogu[pozycja].Typ of tekatalog,telink: IdFTP1.ChangeDir(ZawartoscKatalogu[pozycja].Nazwa); Button4Click(Sender); on E :Exception do MessageBox(Handle,PChar('Nie udało się zmienić katalogu ('+E.Message+')'),'Błąd',MB_OK+MB_ICONERROR); teplik: if MessageBox(Handle,PChar('Czy pobrać plik '+ZawartoscKatalogu[pozycja].Nazwa+'?'),'Pobieranie',MB_YESNO+MB_ICONQUESTION)=ID_YES then Button6Click(Sender);

Ćwiczenie 13 Odświeżanie formy podczas pracy Tworzymy metodę zdarzeniową do IdFTP1.OnWork i umieszczamy w niej Refresh. procedure TForm1.IdFTP1Work(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Integer); Refresh; //Application.ProcessMessages; Możemy też zająć się kolejką komunikatów (Application.ProcessMessagess), ale tego bym odradzał, bo może to pozwolić użytkownikowi aplikacji nieźle namieszać. Ćwiczenie 14 Wysyłanie pliku 1. Dodajemy komponent TOpenDialog. a) Title := Wybierz plik do wysłania, b) Options.ofFileMustExist :=True 2. Dodajemy przycisk z etykietą Wyślij plik... procedure TForm1.Button7Click(Sender: TObject); if OpenDialog1.Execute then IdFTP1.Put(OpenDialog1.FileName,SaveDialog1.FileName,False); ShowMessage('Wysyłanie pliku zakończone'); on E :Exception do MessageBox(Handle,PChar('Nie udało się wysłać pliku ('+E.Message+')'),'Błąd',MB_OK+MB_ICONERROR); Button4Click(Sender);

Ćwiczenie 15 Kasowanie pliku z serwera Dodajemy przycisk z etykietą Usuń zaznaczony plik i tworzymy domyślną metodę zdarzeniową: procedure TForm1.Button8Click(Sender: TObject); var pozycja :Integer; pozycja:=listbox1.itemindex; if (pozycja<0) and not (ZawartoscKatalogu[pozycja].Typ=tePlik) then IdFTP1.Delete(ZawartoscKatalogu[pozycja].Nazwa); on E :Exception do MessageBox(Handle,PChar('Nie udało się usunąć pliku z serwera ('+E.Message+')'),'Błąd',MB_OK+MB_ICONERROR); Button4Click(Sender); Ćwiczenie 16 Tworzenie katalogów na serwerze Nowy przycisk z etykietą Twórz katalog: procedure TForm1.Button9Click(Sender: TObject); if Edit1.Text='' then IdFTP1.MakeDir(Edit1.Text); on E :Exception do MessageBox(Handle,PChar('Nie udało się stworzyć katalogu ('+E.Message+')'),'Błąd',MB_OK+MB_ICONERROR); Button4Click(Sender);

Ćwiczenie 17 Kasowanie katalogów na serwerze Nowy przycisk z etykietą Usuń zaznaczony katalog: procedure TForm1.Button10Click(Sender: TObject); var pozycja :Integer; pozycja:=listbox1.itemindex; if (pozycja<0) and not (ZawartoscKatalogu[pozycja].Typ=teKatalog) then IdFTP1.RemoveDir(ZawartoscKatalogu[pozycja].Nazwa); on E :Exception do MessageBox(Handle,PChar('Nie udało się usunąć katalogu ('+E.Message+')'),'Błąd',MB_OK+MB_ICONERROR); Button4Click(Sender); Inne Ćwiczenie 18 Pobieranie plików przez HTTP 1. Na formie umieszczamy komponenty TEdit, TButton (oba z palety Standard), TSaveDialog (paleta Dialogs) i TIdHTTP (paleta Indy Clients). 2. Tworzymy domyślną metodę zdarzeniową przycisku: procedure TForm1.Button1Click(Sender: TObject); var strumien :TMemoryStream; pozycja :Integer; pozycja:=lastdelimiter('/',edit1.text); SaveDialog1.FileName:=Copy(Edit1.Text,pozycja+1,Length(Edit1.Text)-pozycja); if SaveDialog1.Execute then

strumien:=tmemorystream.create; IdHTTP1.Get(Edit1.Text,strumien); strumien.savetofile(savedialog1.filename); ShowMessage('Pobieranie zakoczone'); finally strumien.free; on E: Exception do ShowMessage('Błąd: '+E.Message); Ćwiczenie 19 PING 1. Na formie umieszczamy komponenty dwa komponenty TEdit oraz TButton, TListBox (Standard) i TIdIcmpClient (Indy Clients). 2. Domyślna metoda do Button1 (bez obsługi błędów) procedure TForm1.Button1Click(Sender: TObject); var i: Integer; IdIcmpClient1.Host:=Edit1.Text; ListBox1.Items.Add('Przesyłam 10 wiadomości o treści '+Edit2.Text); for i:=1 to 10 do IdIcmpClient1.Ping(Edit2.Text,i); 3. Tworzymy metodę zdarzeniową do IdIcmpClient1.OnReply: procedure TForm1.IdIcmpClient1Reply(ASender: TComponent; const AReplyStatus: TReplyStatus); ListBox1.Items.Add(IntToStr(AReplyStatus.SequenceId)+'. Odpowiedź z '+AReplyStatus.FromIpAddress+' odebrana w ciągu <='+IntToStr(AReplyStatus.TimeToLive)+': "'+AReplyStatus.Msg+'", ilość bajtów='+inttostr(areplystatus.bytesreceived));