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