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


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

Budoucnost elektroniky: čeští vědci stojí za revolučním čipem, který nemá ve světě obdoby

Budoucnost elektroniky: čeští vědci stojí za revolučním čipem, který nemá ve světě obdoby

** Čeští vědci pod vedením Tomáše Jungwirtha vyvíjí nový typ revolučního paměťového čipu ** Zatímco v současnosti elektronika pracuje s elektrony, v budoucnu to budou spiny elektronů ** Čipy budou moci být klidně i 1 000x rychlejší a úspornější

Karel Javůrek | 32

Nová zbraň Microsoftu proti iPadu: Levný tablet Surface Go bude stát jen deset tisíc

Nová zbraň Microsoftu proti iPadu: Levný tablet Surface Go bude stát jen deset tisíc

** Microsoft představil nový tablet Surface Go ** Nový model zaujme nízkou cenou, ale schopnostmi zařízení Surface ** Microsoft nepoužil čip ARM, ale klasický procesor od Intelu 

Karel Javůrek | 116

Jak dopadl velký den Applu s náloží novinek: Sledujte, co letos připravil

Jak dopadl velký den Applu s náloží novinek: Sledujte, co letos připravil

** Apple večer představil novinky ** Ukáže nové operační systémy, ale čekala se i nová zařízení ** Začíná vývojářská konference Applu WWDC 2018

Karel Javůrek | 87


Aktuální číslo časopisu Computer

Velký test 18 bezdrátových sluchátek

Vše o přechodu na DVB-T2

Procesory AMD opět porážejí Intel

7 NVMe M.2 SSD v přímém souboji