Aktualizováno v únoru 2019

      
 

   Základy programování - nevizuální objekty pro komunikaci mezi počítači
 
Základy programování počítačové komunikace pro radioamatérskou praxi s využitím nevizuálních objektů

 
Porozhlédnul jsem se po nevizuálních objektech pro komunikaci v placeném vývojovém prostředí XOJO (blíže vpravo) a v Gambasu (obrázek zcela vpravo), který se používá pro psaní aplikací pro Linux.

Sériový port nalezneme ve všech vývojových prostředích, toolbox Xojo -jde o první ikonu, toolbox Gambas - jde o třetí ikonku v horním řádku, je rovněž ve Visual Basic Express od vydání 2008. Sériový port s úspěchem použijeme u aplikací, pomocí kterých budeme ovládat naše TCVRy a další hračky s mikropočítačem a sériovým rozhraním. Já pro tento účel používám ve svých konstrukcích s radostí čipy PICAXE, které se programují rovněž v Basicu.

Důležitý je Server Socket a Client.  Tyto objekty použijeme při komunikaci mezi počítači, např. mezi desktopem Linux a Raspberry kontrolérem s operačním systémem Linux. V toolboxu najdeme ikony na čtvrtém (server) a pátem místě v horní řadě palety Networking.

V Gambasu najdeme rovněž nevizuální objekty UDP, FTP a HTTP serverů. V Xojo zase objekt pro komunikaci mezi aplikacemi na desktopu (není v toolboxu vidět).

Komponenty pro TCP/IP komunikaci ve Visual Basicu (ve verzi Express 2008 nejsou) v novějších vydáních jsem nezkoumal, protože toto prostředí neumí vytvořit Cross Platform spustitelný program, tedy konkrétně balíček pro Linux v Raspberry (nebo Asus Tinker Board). Dávat do každé komunikující hračky drahou licenci Windows, která překročí i 10x cenu kontroléru, to si opravdu nemohu dovolit.

Takže následující úloha bude řešená v prostředí Gambas 3 se vším všudy.

 V toolboxu Gambasu najdeme ikony na čtvrtém (server) a pátem místě v horní řadě palety Networking.

     

Učíme se programovat aplikaci server client

Výborným místem k získání "rozumů" jsou ukázkové prográmky se zdrojovým kódem od profesionálních programátorů. Snadno je získáme např. z příkladů uvedených ve vývojovém prostředí, které se zobrazuje při startu:

Stáhneme si oba příklady (ServerSocket i ClientSocket). Lze je rovněž stáhnout na této stránce ServerSocket zde a ClientSocket zde. Jsou zazipované. Provedeme dekomprimaci a adresáře si uložíme mezi ostatní projekty Gambasu.

Nejdřív otevřeme aplikaci ServerSocket a vyrobíme si spustitelný soubor. Dělá se to takto:

Postup je z hlavního menu Projekt - Vytvořit - Spustitelný. Spustitelný soubor si uložíme. Dá se spustit poklikáním na ikonu.
Totéž provedeme s projektem ClientSocket. Opět si spustitelný soubor uložíme.

Oba programy spustíme a provedeme asi 5 kroků pro zkoušku komunikace.

1. Nastavíme port, kde bude server naslouchat. Opravdu jsme spustili reálný server na konkrétní IP adrese.
2. Pustíme naslouchání portu.
3. Připojíme klienta k serveru.
4. Napíšeme a odešleme zprávu do serveru.
5. Server nám 10 x odpoví stejnou zprávou (tzv. echo ...).

Uvedený školní prográmek je výbornou ukázkou příkladu, jak si naprosto prakticky osaháváme a testujeme nevizuální komponenty pro komunikaci. Můžeme si to dovolit, v předchozích lekcích jsme se naučili programovat velice svižně grafická rozhraní woken (dělat s třídou Form), používat viditelné komponenty a procedurální vlastnosti jazyka. Podíváme se ještě na následující detaily, které jsou důležité.

Přidání sady komponentů do projektu.

To se dělá např. tady a takto:

V každém případě si prozkoumáme grafický návrh formuláře. Všimněte si použité nevizuální komponenty. Je selektovaná a vidíme její Properties:

Prozkoumáme nějak systematicky kód. Např. mě zajímaly příkazy a jejich syntaxe při použití tlačítek. Mimo jiné jsem se díval např. na toto:

Snažíme se pochopit význam příkazů. Tedy, co dělají. V této etapě učení nám to určitě půjde. Při každém spuštění prostředí Gambas si můžeme rovněž prozkoumat tzv. Tipy dne. Jsou užitečné a opět se je snažíme pochopit:

Úmyslně jsem tady publikoval tip na to, jak se překládá text napsaný v Gambasu do jakéhokoliv jazyka. Autor použil v obou testovacích programech překládání. Jenže stroj překládal kravsky, zajímal jsem se o způsob, jak se to dělá. Jenže u objektů popsaných v etapě vizuálního návrhu (pomocí tabulky Properties, Vlastnosti) se to dělá jinak. Tam, kde mi nedokonalý překlad vadil, jsem napsal popisky česky a nastavil vlastnost Translate na False. Možná je to někde v manuálu nebo v knihách popsáno, ale já se to naučil intuitivním používáním Gambasu na notebooku, když jsem jel nedávno vlakem z Pardubic a učil jsem se komunikaci aplikací po internetu s užitím server a client socketů.

Poznámky:
1. Malé Raspberry (asi za 400 Kč) je schopné běžet pod Linuxem (Debian) a má WiFi modul. Lze na něm spustit server.
2. K serveru se dá připojovat přes WiFi aplikací z desktopu, kde máme puštěnou aplikaci client.

Zkouška komunikace ještě jednou 

Tento odstavec nesouvisí s programováním, ale s chováním desktopů v sítích. Byl jsem požádán jedním ze čtenářů, zda bych tuto část komunikace nepopsal polopaticky ve větším detailu.

Takže polopatický popis přípravy zkoušky komunikace mezi serverem a klientem.

Pravě děláme něco na notebooku alfa-HP-Compaq. Spustíme na něm náš Server Socket a klikneme tlačítko naslouchej.

Server začne naslouchat.

Můžeme se podívat do routeru naší domácí sítě, na jaké IP adrese nám náš notebook alfa-HP-Compaq ... běží.

Do routeru se obvykle přihlašujeme přes síť na IP adrese 192.168.1.1, kde běží server routeru. Musíme znát jméno (login) a heslo (password). Po přihlášení do mého routeru Asus vidím obrazovku - viz dole. Klikneme na list přihlášených klientů a najdeme náš desktop alfa-HP-Compaq ....Aby to bylo polopaticky, zakroužkoval jsem jeho IP adresu do kroužku.
Tento stroj má IP adresu 192.168.1.162; na této adrese nám rovněž běží náš Server Socket, který jsme spustili. Pokud si adresu pamatujeme, můžeme se z routeru odhlásit.

 

   
Zapneme si jiný desktop, připojíme se k síti a pustíme si na něm náš testovaný Client Socket, který jsme si už dříve stáhli, pustili si ho v Gambasu a vyrobili jsme si podle výše uvedeného návodu spustitelný soubor.

Pokud jsme toto udělali, potom na spustitelný soubor pouze zaklikáme, spustí se.

Komunikaci vyzkoušíme tímto postupem:

1. Vzpomeneme si na IP adresu serveru a napíšeme ji do pole Host - viz obrázek.
2. Klikneme Připojit k serveru.
3. Připojení se nám zobrazí - viz modrý ovál, obrázek vedle.
4. A můžeme psát a posílat zprávy na server, který naslouchá.

Protože serverový socket naslouchá, bude nám vypisovat podle toho, jak nám to programátor naprogramoval, různé věci:

- např., že přišel požadavek na připojení z té a té IP
- že se někdo připojil (Connection from IP)
- že Client pracuje a také, že jsme obdrželi zprávu "Zdravím Tě HP Compaq"
- že se potom client odpojil

atd.

Takže praktická ukázka činnosti v domácí sít. Obdoba toho, co jsme vyzkoušeli na jednom desktopu. Tam jsme nemuseli zjišťovat IP adresu serveru, protože víme, že se servery na našem desktopu lze pracovat na adrese localhost - viz příklad spuštění nahoře stránky.

Na co se zaměřit při studiu kódu?
Např. jak se nastavují vlastnosti Server Socketu za běhu programu, jak autor napsal procedury čtení ze socketu, zápis do socketu, jaký je formát přenášených dat. Nebo kde je napsána konstanta 10, která opakuje echo 10x, apod. Kód je velice přehledný.

Domácí úloha
Měli bychom být se Server Socketem a Client Socketem schopni napsat dvě jednoduché úlohy. Server Socket bude v úloze, která bude mít dva (nebo více) barevné čtverečky. Když pošleme povel zapnout, bude příslušný čtvereček svítit zeleně, když pošleme povel vypnout, bude čtvereček svítit červeně. Client Socket bude v úloze, kde budou nějaká tlačítka na zapnutí nebo vypnutí těch čtverečků na serveru. Tedy takové malé dálkové ovládání. Jestli pojedu někam dál vlakem, tak to napíšu a dám to sem jako řešený domácí úkol ...  Jel jsem zrovna dneska vlakem z Prahy do ČB. Ještě mi zbývá asi 10 minut, ale je to tady.
 

Zpět na obsah


TU 73, Mira, ok1ufc