Tipy a triky v Delphi, díl 168. – klient a server

V letošním posledním dílu našeho seriálu si vytvoříme jednoduchou dvojici aplikací klient-server. Toto vzdálené spojení poté využijeme pro spuštění libovolné činnosti na cílovém počítači.

Dnešní díl bude spíše taková menší příprava na některé z příštích pokračování, kdy se podíváme na komponenty Indy, které jsou od jisté verze standardní součástí Delphi a nebo lze tento balík zdarma stáhnout a doinstalovat. Tento balík slouží pro veškerou síťovou komunikaci a vytvořit se s ním dá opravdu téměř cokoliv, co se internetu týká. To ale až někdy jindy, dnes si vystačíme jen s komponentami TcpClient a TcpServer ze záložky Internet. Pro náš dnešní příklad budou stačit. Bohužel je najdete až v Delphi7, ale starší verze obsahují jejich ekvivalenty ClientSocket a ServerSocket na téže záložce, které jsou sice odlišné, ale přečtením nápovědy jistě dokážete zdrojový kód přizpůsobit i těmto starším komponentám.

Vytvoříme si dvojici aplikací, kdy jedna bude fungovat jako server a druhá jako klient. Ovšem pozor, zde nastává první zmatení nepřítele. Serverová část aplikace nedokáže běžným způsobem posílat klientům nějaká data. Vždy je to klient, který si od serveru něco vyžádá. Jak tedy docílit toho, abychom mohli mít aplikaci, kterou spustíme a na dálku pošleme nějaký příkaz několika "klientům"? Velmi snadno. Obrátíme role obou aplikací. Hlavní aplikace, která bude rozesílat příkazy okolním počítačům, nebude fungovat jako server, ale naopak jako klient. Připojí se na cílový počítač, kde bude běžet serverová část aplikace, která přijme příkaz od klienta a vykoná jej. Naše architektura tedy pořád zůstává klient-server, nicméně formálně se role otočily. Klient běží na hlavním „administrátorském“ počítači a rozesílá příkazy cílovým počítačům, kde běží serverová část. Náš řídící program se tedy připojí na několik serverů (cílových stanic) a pošle jim požadovaný příkaz. Snad jsem to příliš nezamotal a situace je jasná. V našem dnešním příkladu tohoto postupu lze využít, nicméně v některém z příštích dílů si ukážeme, jak tuto menší komplikaci vyřešit i jiným způsobem.

Vzhůru k našim aplikacím. Názvy obou částí zachováme dle použitých komponent a začneme částí klientskou. Na prázdný formulář umístíme jen tři tlačítka, Label a komponentu TcpClient. Samotné obsluhy událostí tlačítek jsou velmi jednoduché a proto vás odkáži na zdrojový kód. Vlastně se jedná jen o připojení a odpojení od serveru a třetí tlačítko posílá požadovaný příkaz. Jedná se prakticky o jednořádkové konstrukce, takže není třeba žádného složitého vysvětlování. Důležité je pouze nastavit u komponenty TcpClient cílový port, který si můžete nastavit prakticky libovolně (v příkladu použito 1234), i když by asi nebylo dobré používat standardních portů pro FTP, WWW atd. Druhým důležitým parametrem je adresa serveru - RemoteHost, na který se připojujeme. Pro testovací účely používáme lokální adresu počítače (localhost), protože při zkoušení si spustíme klientskou i serverovou část najednou na svém počítači. V reálu si pak doplňte skutečnou IP adresu cílového počítače, kde serverová část poběží. No a to je vlastně vše. Můžete si ještě přizpůsobit odesílanou zprávu. V ukázce posíláme text "restart", ale pochopitelně můžete poslat cokoliv a mít i více druhů zpráv.

Serverová část aplikace je ještě jednodušší. Obsahuje komponentu TcpServer, u které nesmíte zapomenout nastavit stejné číslo portu jako u klienta. Poté již jen server čeká na to, až mu klient pošle příkaz "restart". Pokud se tak stane, provede příslušnou činnost. Pro zjednodušení se v naší ukázce nebude počítač restartovat, ale jen se zobrazí příslušný informační dialog. V reálné aplikaci bychom museli přidat příslušný kód pro restartování nebo libovolnou jinou činnost.

Dnešní dvojice aplikací je velmi primitivní a znázorňuje jen ty nejzákladnější funkce. Bylo by dobré lépe ošetřit výjimečné stavy a chyby připojení, zajistit dynamické načítání IP adres pro klientskou část aplikace např. z INI souboru a podobně. Vylepšení se zkrátka nabízí celá řada, takže se vrhněte do experimentů. V některém z příštích dílů si pak ukážeme trochu komplikovanější aplikaci s využitím komponent Indy.

Jako obvykle si oba dnešní ukázkové projekty můžete stahovat zde a mně už zbývá jen popřát vám do dalšího roku plno úspěchů nejen s Delphi.

Témata článku: Software, Internet, Programování, Požadovaný příkaz, Složitá část, Klient, Důležitá část, Díl, Dobrý způsob, Label, Ukázkový příklad, Zjednodušený příklad, Dobrá obsluha, Trik, Hlavní aplikace, Složitý způsob, Řídicí aplikace, Hlavní role, Důležitá role

Určitě si přečtěte

Velká podzimní aktualizace Windows 10 je tady: Co přináší Fall Creators Update

Velká podzimní aktualizace Windows 10 je tady: Co přináší Fall Creators Update

** Po půl roce je tu další aktualizace Windows ** A opět přináší hlavně hromadu drobných kosmetických vylepšení ** Podívali jsme se na ty nejzajímavější

17.  10.  2017 | Jakub Čížek | 180

Budoucností Windows 10 je Fluent Design. Takto bude jednou vypadat celý systém

Budoucností Windows 10 je Fluent Design. Takto bude jednou vypadat celý systém

** Fluent Design je vzhled, do kterého postupně Microsoft převleče celý systém ** Staví na průhlednosti a velkých plochách ** Do Windows 10 se z části dostane už zítra při vydání podzimní aktualizace

16.  10.  2017 | Stanislav Janů | 154

Nejlepší optické iluze: Z toho vám půjde hlava kolem

Nejlepší optické iluze: Z toho vám půjde hlava kolem

** Mozek se nechá snadno ošálit, a to mnoha způsoby ** Podívejte se na několik nejlepších optických iluzí ** Iluze dokazují, že vnímání reality může být značně zkreslené

16.  10.  2017 | Vojtěch Malý


Aktuální číslo časopisu Computer

Nový seriál o programování elektroniky

Otestovali jsme 17 bezdrátových sluchátek

Jak na nákup vánočních dárků ze zahraničí

4 tankové tiskárny v přímém souboji