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.

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

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 | 185

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ů | 155

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í

19.  10.  2017 | David Polesný | 17

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