Tipy a triky v Delphi, díl 169. – klient a server podruhé

Po minulém pokusu o první síťovou aplikaci budeme dnes v tématu pokračovat. Slíbili jsme si použití komponent Indy a trochu složitější aplikaci. Ukážeme si tedy, jak na serveru sledovat, co se děje na připojených klientských stanicích.

Dnešní příklad se opět skládá ze dvou kusů, klientské a serverové části aplikace. Ukážeme si jednoduchou úlohu, kdy na klientských počítačích spustíme aplikaci, která bude komunikovat se serverem. Serverová část bude umožňovat vyžádat si na klientech snímek pracovní plochy daného počítače. Program tak může využít například správce sítě LAN, který na všechny počítače nainstaluje klientskou část programu a nechá si na server poslat po stisku tlačítka snímky jednotlivých pracovních ploch klientů. Ano, je to tak, dnes budeme tak trochu "šmírovat" cizí počítače.

Program pochopitelně opět využívá protokol TCP/IP, takže může fungovat samozřejmě nejen v síti LAN, ale i v rámci internetu. Zde však může být problém s přenášenými daty. I když před odesláním obrázku pracovní plochy jej převedeme do formátu JPEG, přesto jeho velikost není natolik malá, aby např. nezatěžovala modemové připojení. Můžete ovšem nastavit větší kompresi, snímky posílat jen jednou za čas a podobně.

Přistupme tedy k našemu programu. Už jsme si řekli, že použijeme komponenty z balíku Indy, který je součástí Delphi novějších verzí a případně si jej můžete zdarma stáhnout a nainstalovat z této adresy. I tentokrát tedy budeme mít dvě aplikace, server a klient, které budou na rozdíl od minulého dílu odpovídat této architektuře nejen použitými komponentami, ale i logikou provázanosti, kdy serverová část aplikace bude hlavním řídícím centrem pro klienty.

Už minule jsme narazili na problém, že server nemůže posílat klientům požadavky aniž by je o to klient požádal. Jak tedy docílíme toho, aby po stisknutí tlačítka na serverové části aplikace nám připojení klienti poslali svůj obrázek? Použijeme k tomu drobnou fintu. Serverová část aplikace si bude držet v paměti seznam připojených klientů a pro každého klienta bude mít vyhrazenu jednu pomocnou logickou proměnnou. Budeme-li požadovat od klienta obrázek stisknutím tlačítka, tato proměnná se nastaví na hodnotu true. Klienti pak budou sami v pravidelných intervalech kontaktovat server a ptát se ho, zda mu nemají poslat svůj snímek (jinými slovy, ptají se na hodnotu zmiňované pomocné proměnné). Je-li tomu tak, snímek pošlou a server pak pomocnou proměnnou opět nastaví na false a čeká na další stisknutí tlačítka.

Formulář serverové části tedy vlastně obsahuje jen komponenty Image, pro zobrazení došlého obrázku, dále tlačítko pro vyžádání jeho poslání a ListBox se seznamem připojených klientů. Označením příslušného klienta v seznamu a stisknutím tlačítka se nám zobrazí snímek jeho pracovní plochy.

Klientský formulář pak z vizuálních komponent neobsahuje vlastně nic, ale aby nebyla plocha úplně prázdná, umístíme na ní Label, který bude zobrazovat stav připojení.

Nejdůležitější jsou pochopitelně samotné komunikační komponenty z balíku Indy. Na serverové straně je to IdTCPServer ze záložky Indy Servers, u které musíme nastavit IP adresu a číslo portu v položce Bindings (opět nastavíme localhost a číslo portu třeba 222). Dále na formulář umístíme komponentu IdThreadMgrDefault, která spravuje jednotlivá vlákna spojení (počítáme s více klienty) a přes stejnojmennou vlastnost komponenty IdTCPServer je navzájem propojíme. Poslední komponenta bude IdAntiFreeze, která zamezí "zamrznutí" uživatelského prostředí opakovaným posíláním Application.ProcessMessages. Na klientské straně budeme potřebovat IdTCPClient (nastavený na adresu a port serveru) a opět IdAntiFreeze. Kromě toho použijeme i Timer pro pravidelné kontaktování serveru.

Tím bylo vlastně řečeno vše hlavní. Detaily naleznete v přiloženém zdrojovým kódu obou částí aplikace. Za zmínku stojí ještě funkce pro získání snímku obrazovky a následné převedení do formátu JPEG, ale obě funkce jsme již v seriálu kdysi používali a tak není třeba žádný další komentář.

Oba ukázkové projekty si můžete opět stáhnout. A ještě upozornění po některých reakcích na minulý díl. Nesmíte zapomenout povolit klientský program při průchodu firewallem, pokud nějaký používáte, jinak vám program samozřejmě nemůže nikdy fungovat.

Diskuze (7) Další článek: Microsoft se rozroste o čtvrtinu

Témata článku: Software, Programování, Drobná zmínka, Timer, Klient, Trik, Jednotlivý díl, Label, Pracovní plocha, Díl, Jednotlivý snímek, Řídicí aplikace, Komunikační komponent, Jednotlivá adresa


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

Užijte si poslední změny času: Už od března 2019 můžeme mít trvale letní čas

Užijte si poslední změny času: Už od března 2019 můžeme mít trvale letní čas

** Evropská komise přijala legislativní návrh na zrušení střídaní času ** Možná tak v březnu 2019 přesuneme ručičky hodinek naposledy ** Od toho okamžiku bude permanentně platit letní čas

Karel Kilián | 96

Co je srdce nového iPhonu? Apple A12 Bionic, první 7nm čip nabitý výkonem

Co je srdce nového iPhonu? Apple A12 Bionic, první 7nm čip nabitý výkonem

** Apple v nových iPhonech používá nový vlastní čip A12 Bionic ** Jde o první 7nm čip na světě ** Kromě vyššího klasického výkonu dostala neuronová část masivní navýšení rychlosti zpracování umělé inteligence

Karel Javůrek | 38

Intel vs. AMD: souboj vícejádrových procesorů začal. AMD zesměšňuje Intel neuvěřitelně nízkou cenou

Intel vs. AMD: souboj vícejádrových procesorů začal. AMD zesměšňuje Intel neuvěřitelně nízkou cenou

** AMD představilo nové levné procesory až s 32jádry ** AMD útočí na serverový i domácí trh Intelu ** Intel nemá konkurenceschopnou nabídku

Karel Javůrek | 85

Byli tam! Důkazy o přistání na Měsíci, Lunochody i čínská sonda jsou vidět z vesmíru

Byli tam! Důkazy o přistání na Měsíci, Lunochody i čínská sonda jsou vidět z vesmíru

** Sonda LRO pořídila z oběžné dráhy Měsíce zajímavé snímky ** Jsou na nich vidět artefakty všech misí programu Apolla, které přistály na povrchu Měsíce ** Jde například o části lunárních modulů, rovery a dokonce i vlajky

Petr Kubala | 65

Jak funguje největší akumulátor v Česku: podívejte se do elektrárny Dlouhé Stráně

Jak funguje největší akumulátor v Česku: podívejte se do elektrárny Dlouhé Stráně

** Přečerpávací vodní elektrárna Dlouhé stráně je obdivuhodné technické dílo ** Stejná turbína vyrábí elektřinu i tlačí vodu zpět do horního jezera ** Strojovna elektrárny je zabudována v podzemí

David Polesný | 34

Windows 95 slaví 23 let. Vzpomínáte na ně? Jak dlouho jste je používali?

Windows 95 slaví 23 let. Vzpomínáte na ně? Jak dlouho jste je používali?

** 24. srpna 1995 zahájil Microsoft prodej Windows 95 ** Uvedení na trh doprovázela masivní reklamní kampaň ** I 23 let poté je určitě na co vzpomínat!

Karel Kilián | 118

ELONOVINKY: Druhá strana popularity – servisy Tesly jsou přeplněné a nestíhají

ELONOVINKY: Druhá strana popularity – servisy Tesly jsou přeplněné a nestíhají

** Automobilka Tesla neustále zvyšuje prodeje svých vozů ** S kvapně rostoucím počtem nových majitelů Tesel ale stoupá i počet zákazníků servisů ** Servisy Tesly nestíhají, firma proto řeší další akutní problém

Petr Melechin, Karel Dlabač | 72

Do kanceláře to nejlepší: Test notebooku HP Elitebook 830 G5

Do kanceláře to nejlepší: Test notebooku HP Elitebook 830 G5

** HP se u nového Elitebooku snaží o nadstandardní výbavu ** Notebook klade důraz na videokonference ve firemním prostředí ** Unikátní displej umí omezit čitelnost z boku

Tomáš Holčík | 57


Aktuální číslo časopisu Computer

Megatest: 13 grafických karet

Srovnání 7 dokovacích stanic s USB-C

Jak na perfektní noční fotografie

Kvalitní zdroje informací pro sebevzdělávání