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.

Diskuze (9) Další článek: Jak se domluvit v různých částech republiky, světa a vesmíru

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


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

Šmírování kamerami Googlu: Koukněte, co šíleného se objevilo na Street View

Šmírování kamerami Googlu: Koukněte, co šíleného se objevilo na Street View

Google stále fotí celý svět do své služby Street View. A novodobou zábavou je hledat v mapách Googlu vtipné záběry. Podívejte se na výběr nejlepších!

redakce | 6

Vyzkoušeli jsme první zařízení s Wi-Fi 6. Nová verze Wi-Fi je rychlejší a spolehlivější

Vyzkoušeli jsme první zařízení s Wi-Fi 6. Nová verze Wi-Fi je rychlejší a spolehlivější

** Wi-Fi 6 přinese větší spolehlivost a dosah sítě ** Zkusili jsme Galaxy S10 připojit k routeru Netgear RAX80 ** Router s Wi-Fi 6 má pro někoho smysl už nyní

Tomáš Holčík | 50

Pojďme programovat elektroniku: Postavíme bezpečnostní systém za 30 Kč

Pojďme programovat elektroniku: Postavíme bezpečnostní systém za 30 Kč

** Před pár týdny jste si mohli v akci koupit Wi-Fi desku za jeden dolar ** Nám už TTGO T-Display dorazila do redakce ** Připojíme k ní jazýčkový kontakt a vyrobíme bezpečnostní systém

Jakub Čížek | 27



Aktuální číslo časopisu Computer

Megatest 18 grafických karet

Ukliďte data v počítači

Jak dobře koupit starší telefon

Vylepšete zvuk televize: test 7 soundbarů