Aktualizováno v březnu 2019

      
 

   Základy programování - nejjednodušší spuštění TCP naslouchače
Všeobecně

Praktické použití popsaného programu si nedovedu příliš představit. Sice z důvodů, že licenční politika Microsoftu je poměrně stupidní a licence nejsou nejlevnější. Určitě Microsoftu zaplatíme za desktopovou licenci Windows, protože nás bude motivovat obrovské množství napsaných aplikací pro Windows a také možnost spouštět ještě větší množství tzv. portable aplikací, které se nikam neinstalují nebo samostatně stojících exáčů (stand alone exe). Určitě se však někteří z nás budou "cukat", aby utratili nemalé peníze na jednoduché servery, které nám budou sloužit např. k naslouchání na IP síti a k příjmu povelů z různých ovládátek a udělátek. Jak se takové naslouchátko programuje pro Linux v Gambasu, jsem popsal na této stránce. Tenkrát jsem vyšel z ukázkového programu pro Linux, který využíval komponenty TCPSocket.

Motivace

Z pedagogických důvodů uvádím na dalších řádcích jednoduché, supervidlácké řešení, napasné ve Visual Basic a vyzkoušené na WinXP a Win10. Řešení nemá ošetřené žádné tzv. výjimky (exception), takže reaguje tak, jak reaguje, v případě, že není správně zadaná IP adresa serveru nebo port. Spustitelný program s TCP naslouchačem toho moc neumí. Umí však naslouchat na zadaném portu a pokud přijde známý povel  z RCP ovladače, obarví mi čtvereček, který je v programu "vod toho" na červeno nebo na modro. Používám to na notebooku na praktické vizuální zkoušení právě těch nejjednodušších TCP ovladačů, které posílají na server jeden z osmi povelů (Zap1, Zap2, ...., Vyp4).

Jak to vypadá?

Po spuštění se objeví okno - viz obrázek vpravo. Do textových polí lze vyplnit IP adresu serveru (našeho notebooku) a číslo portu, na kterém bude naslouchač naslouchat.

Po kliknutí na tlačítko "Naslouchej" se okno "sruluje" a budou vidět jen čtverečky, které nám návěstí přijaté povely:

Povely Zap1 až Zap4 obarví čtverečky na modro, povely Vyp1 až Vyp4 obarví čtverečky na červeno.

Jednoduchý program pro povelování pro Linuxy byl uveden v odkazu nahoře. Jednoduchý program pro povelování z desktopů Windows jsem uvedl zde.

 

 

   
Při psaní programů TCP ovladačů si můžeme připojit notebook např. k WiFi ve vlaku nebo k WiFi na mobilu. A můžeme zkoušet, zda nám napsaný ovladač posílá povely. Výsledek hned vidíme, jako např. já na stařičkém mininotebooku Asus s Win10Home (32 bit). Oba spuštěné programy najdeme na Ploše (nemají ikony) jako PO1 (ovladač) a TCP_listener (naslouchátko): 

Výpis programu

Celý výpis ve formátu pdf lze stáhnout zde. Celá hračka je založena na importu 3 knihoven. Ve Visual Basicu jsem pro danou úlohu žádnou nevizuální komponentu neviděl. Importoval jsem knihovny:

Imports System.Net.Sockets
Imports
System.Net
Imports
System.Text

Program používá několika málo procedur:
Procedura Sroluj () sroluje část okna s IP adresou, portem a tlačítkama, pokud zapneme naslouchání.
Procedura Detekuj_povel  () testuje proměnnou povel (řetězec znaků) a pokud je přijat známý povel (Zap1, Zap2, ..., Vyp1, ..., Vyp4), tak obarví čtvereček (Label4 až Label7) vod toho.
Na další proceduru, tj. Start_naslouchace ( ) se zaměříme. Tam je na několika málo řádcích celý algoritmus, který plní funkci, kterou od programu očekáváme:

Důležité jsou instrukce na spuštění serveru, na otevření NetworkStreamu, clienta pro akceptaci serveru, instrukce pro čtení bajtů ze streamu (stream.Read) a cyklus (While End While), který se provádí tak dlouho, dokud není proměnná i nenulová.

V programu je časovač. Časovač je po spuštění programu vypnutý. Po vytvoření serveru (tlačítko "Naslouchej!") se časovač spustí. Je tam proto, aby s každým tiknutím časovače spustil proceduru Start_naslouchace ().

Proměnné

V programu je použito několik málo proměnných - viz deklarace:

Proměnné tam jsou typu integer (i, port), string (povel), bytes  (matice bajtů). Také jsou tam deklarace, které jsme v předchozích lekcích neviděli (IPAddress), TCPListener, NetworkStream. Jde o tzv. deklarace objektů. Objekty jsou zapouzdřené, nevidíme do nich, ale voláme jejich metoddy, jejichž výsledky využíváme (čtení ze streamu, vytváření TCP klienta, zde ve variantě TCPListener, sehnání IP adresy z řetězce (IPAddres.Parse).
Cílem lekce bylo zopakovat si postup imperativního procedurálního programování a naučit se několik málo krůčků kolem objektového programování, tj. importu knihoven s objekty a zavoláním několika málo metod.

Poznámky

1. Já jsem si zvykl zjišťovat IP adresu na DHCP serveru (doma se vždy kouknu do routeru). No, ve vlaku tohle nejde. Protože Microsoft je s ergonomií a přehledností na štíru, tak může být někdy pracnější, najít, kam to zase schovali. Tak, jak nemám rád příkazový řádek, byl jsem rád, že ve Windows 10 byl. Zadal jsem do hledátka s lupou příkaz cmd a po otevření příkazového řádku jsem napsal: IPconfig

Na třetím řádku odspoda je IP adresa našeho serveru. Také můžeme dát IPconfig /all

Exe soubor a projekt

Má smysl ještě zveřejňovat takto jednoduché školní příklady? Už umíte trochu dělat s uživatelským rozhraním, používat vizuální i nevizuální komponety z toolboxu, psát procedury a několik dalších příkazů, ale také importovat objekty a využívat jejich metod. Není to až tak málo na to, abyste si napsali komunikující program, který vám bude něco řídit. Nicméně, ještě u tohoto školního příkladu uvedu odkazy: exe soubor je zde a zdrojový projekt zde.

Poznámky

1. Pod Wine jsem program spustil. Když jsem přijal první povel, program ho ještě provedl a potom skončil.
2. Pod Virtual Boxem program fungoval normálně, server naslouchal a přijímal povely ze sítě:


 

Zpět na obsah


TU 73, Mira, ok1ufc