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í, Dobrý způsob, Složitá část, Zjednodušený příklad, Požadovaný příkaz, Díl, Řídicí aplikace, Složitý způsob, Ukázkový příklad, Hlavní role, Hlavní aplikace, Dobrá obsluha, Důležitá role, Label, Důležitá část, Klient, Trik

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


Aktuální číslo časopisu Computer

26 procesorů v důkladném testu

Zhodnotili jsme 18 bezdrátových reproduktorů

Jak fungují cash back služby?

Pohlídejte své děti na internetu