Seriál - 16. díl
Ovládací prvky pro síťovou komunikaci - 2. část

16. Ovládací prvky pro síťovou komunikaci
    16.2 WebBrowser
    16.3 Inet


16. Ovládací prvky pro síťovou komunikaci

V dnešní části si probereme další prvky sloužící k síťové komunikaci. Přesněji půjde o prvek WebBrowser a Inet. K čemu slouží se dozvíte v jednotlivých kapitolách.

16.2 WebBrowser

WebBrowser je prvek, který slouží hlavně k práci s HTML dokumenty. Umí také zobrazovat složky na lokálním počítači nebo na síti. Umí toho velmi mnoho, proto si probereme pouze některé základní operace. Do projektu jej zařadíte zatržením položky Microsoft Internet Control v dialogu Components z menu Project -> Components.

Kterou stránku chcete zobrazit určíte metodou Navigate nebo Navigate2. Je úplně jedno, kterou z nich použijete, Navigate2 má význam pouze v jazyku C++. První parametr metody je URL stránky. Druhý může být kombinace hodnot, určujících jak se stránka otevře:

1 otevření stránky v novém okně
2 nepřidá stránku do historie
4 nečte data z diskové vyrovnávací paměti (cache)
8 nezapíše zobrazenou stránku do diskové vyrovnávací paměti (cache)

Třetí parametr určuje název rámce, ve kterém se stránka otevře. Metoda má ještě dva další parametry, které by však bylo zbytečné probírat v tomto krátkém přehledu.

'Otevře soubor C:\serial.htm
WebBrowser1.Navigate "file://C:\serial.htm"

'Stránku www.seznam.cz otevře v novém okně
WebBrowser1.Navigate "http://www.seznam.cz", 1

'Otevře složku D:\DATA v novém okně a nepřidá ji do historie
WebBrowser1.Navigate "file://D:\DATA", 3

Pro rychlejší navigaci slouží několik metod. GoBack se posune o jednu stránku v historii zpět, GoForward o jednu stránku dopředu. Chcete-li zobrazit domovskou stránku, můžete pomocí metody GoHome. Poslední metoda pro navigaci je GoSearch, která zobrazí vyhledávací stránku (nastavuje se v dialogu Internet v ovládacích panelech nebo přímo z Internet Exploreru).

Jak už bylo řečeno na začátku, prvek WebBrowser má ještě mnoho dalších možností, ale my si je zde probírat nebudeme. Spoustu informací najdete v MSDN. Dejte si však pozor na to, k čemu je nápověda vlastně napsána. Stejná nápověda je totiž pro prvek WebBrowser a pro objekt InternetExplorer, pouze dole je u každého tématu napsáno, zda je to pro WebBrowser, InternetExplorer, nebo pro oba.

Zpět na obsah


16.3 Inet

Prvek Inet poskytuje připojení po síti pomocí protokolů FTP, HTTP a HTTPS. Pomocí FTP umožňuje připojení k FTP serveru a na něm provádění základních FTP příkazů (stáhnutí nebo uložení souboru atd.). Pomocí HTTP a HTTPS umožňuje připojení k WWW serveru a stáhnutí nějakého dokumentu. Ukážeme si oba dva případy.

Do projektu jej zařadíte zatržením položky Microsoft Internet Transfer Control v dialogu Components z menu Project -> Components.

Synchronní a asynchronní přenos

Prvek Inet umožňuje přenos souborů synchronně i asynchronně. Synchronní přenos se provádí metodou OpenURL. Jako parametr jí zadáte soubor, který chcete stáhnout a metoda vám vrátí požadovaná data (pomocí druhého parametru určujete typ stahovaných dat). Tzn. dokud nejsou data vrácena, program dále nepokračuje.

Zobrazení stránky www.seznam.cz (HTML kód).

Text1.Text = Inet1.OpenURL("http://www.seznam.cz")

Zobrazení textového souboru z FTP serveru.

Text1.Text = Inet.OpenURL("ftp://ftp.seznam.cz/soubor.txt")

Uložení binárního souboru na lokální disk.

Dim b() As Byte, iFile As Integer

b() = Inet1.OpenURL("ftp://195.113.105.136/listek.doc", icByteArray)
iFile = FreeFile
Open "C:\listek.doc" For Binary As #iFile
Put #iFile, , b()
Close #iFile

Asynchronní přenos funguje trochu jinak. Pomocí metody Execute zadáte, co chcete provádět, např. FTP příkaz, přičemž program pokračuje dále (seznam podporovaných FTP a HTTP příkazů včetně jejich popisu najdete v MSDN). Při zaslání všech dat požadovaných metodou Execute je vyvolána událost StateChanged, ve které přijatá data zpracujete.

Zobrazení seznamu souborů kořenového adresáře serveru ftp.seznam.cz.

Private Sub Command1_Click()
  Inet1.Execute "ftp://ftp.seznam.cz", "DIR"
End Sub

Private Sub Inet1_StateChanged(ByVal State As Integer)
  Dim vtData As Variant

  Select Case State
    Case icResponseCompleted
      vtData = Inet1.GetChunk(1024, icString)
      Do While LenB(vtData) > 0
        Text1.Text = Text1.Text & vtData
        vtData = Inet1.GetChunk(1024, icString)
      Loop
  End Select
End Sub

Pomocí Execute je spuštěn FTP příkaz DIR. V události StateChanged je nejdříve otestováno, zda jde o zprávu, na kterou čekáme (icResponseCompleted), protože prvek se nachází během komunikace v různých stavech a o všech informuje tato událost. Všechna data jsou ve vyrovnávací paměti, pomocí metody GetChunk je možné je získat. Opět máte možnost určit, o jaká data se jedná, možnosti jsou icString a icByteArray.

Uložení souboru na FTP server nebo stáhnutí souboru z FTP serveru na lokální počítač je jednodušší.

'Uloží soubor z lokálního PC na FTP server
Inet1.Execute "ftp://ftp.seznam.cz", "PUT C:\soubor.txt soubor.txt"

'Uloží soubor z FTP serveru na lokální PC
Inet1.Execute "ftp://ftp.seznam.cz", "GET soubor.txt C:\soubor.txt"

Nastavení připojení

Prvek umožňuje spoustu různých kombinací připojení. Jedno z možných nastavení je protokol. Nastavuje se vlastností Protocol. Díky tomu, že prvek umožňuje připojení přes FTP nebo HTTP se snaží sám rozeznat, který protokol hodláte použít. Nejlépší je však nespoléhat se na takové vlastnosti a nastavit si raději vše sám. Jedna možnost je použití této vlastnosti a druhá zadání názvu protokolu přímo do URL adresy tak, jak jsme to již použili ve výše uvedených příkladech.

'FTP protokol
Inet1.Protocol = icFTP

'HTTP protokol
Inet1.Protocol = icHTTP

Další možností je typ připojení. Vlastnost, která se o něj stará, je AccessType. Vybrat si můžete buď přímé připojení (icDirect) nebo připojení přes proxy server (icNamedProxy). V případě, že se chcete připojit přes proxy server, musíte také zadat jeho název do vlastnosti Proxy. Existuje ještě třetí možnost, icUseDefault, která je ve většině případů nejvýhodnější. Zjistí nastavení existujícího připojení z registru a podle toho se pak snaží připojit.

'proxy server
Inet1.AccessType = icNamedProxy
Inet1.Proxy = "NasHlavniProxyServer"

'přímé připojení
Inet1.AccessType = icDirect

Spousta serverů (nebo spíše většina) umožňuje anonymní připojení. To provádí prvek automaticky. Chcete-li se však přihlásit pod jiným účtem, musíte zadat také uživatelské jméno a heslo. Jak jinak než vlastnostmi UserName a Password. V tomto případě však nemůžete zadávat URL adresu až metodě Execute, ale musíte ji zadat do vlastnosti URL. Pokud byste ji zadali přímo do Execute, přihlásil by vás prvek jako anonymous.

Upravíme-li kód na zobrazení souborů adresáře FTP serveru (pouze první proceduru) na přihlášení pod uživatelským jménem a heslem, měla by vypadat takto:

Private Sub Command1_Click()
  Inet1.Protocol = icFTP
  Inet1.URL = "ftp.seznam.cz"
  Inet1.UserName = "test"
  Inet1.Password = "heslo"
  Inet1.Execute , "DIR"
End Sub

Zpět na obsah