|
Řešení
Jak jsem dříve napsal, moje oko v Toolboxu Visual
Basic nevidělo komponentu podobnou TCP Socketu. Takže očekávám psaní
kódu a nějaký ten oser. Až tak hrozné to nebylo. Kreslil a psal jsem
ve Visual Basic Express 2018. Uživatelské rozhraní vidíte na spuštěné
aplikaci. IP adresa se před povelováním zadá do TextBox1. Port je
nastaven přiřazením konstanty natvrdo (použito port = 32340). Celý kod
vypadá takto:
Imports System.Net.Sockets
Public
Class Form1
Dim
port As
Integer =
32340 'deklarace promenne port a
natvrdo yadana hodnota
Dim
server As
String
'deklarace promenne server, tedy
hodnota IP adresy
Dim
povel As
[Byte]()
Private
Sub
Form1_Load(ByVal
sender As
System.Object, ByVal
e As
System.EventArgs) Handles
MyBase.Load
End
Sub
Private
Sub
Button1_Click(ByVal
sender As
System.Object, ByVal
e As
System.EventArgs) Handles
Button1.Click
povel = System.Text.Encoding.ASCII.GetBytes("Zap1")
'priradi se hodnota promenne
povel
TCP_klient_makej()
'zavolani procedury (metody)
TCP_klient_makej()
End
Sub
Private
Sub
Button2_Click(ByVal
sender As
System.Object, ByVal
e As
System.EventArgs) Handles
Button2.Click
povel = System.Text.Encoding.ASCII.GetBytes("Vyp1")
'priradi se hodnota promenne
povel
TCP_klient_makej()
'zavolani procedury (metody)
TCP_klient_makej()
End
Sub
Private
Sub
Button3_Click(ByVal
sender As
System.Object, ByVal
e As
System.EventArgs) Handles
Button3.Click
povel = System.Text.Encoding.ASCII.GetBytes("Zap2")
'priradi se hodnota promenne
povel
TCP_klient_makej()
'zavolani procedury (metody)
TCP_klient_makej()
End
Sub
Private
Sub
Button4_Click(ByVal
sender As
System.Object, ByVal
e As
System.EventArgs) Handles
Button4.Click
povel = System.Text.Encoding.ASCII.GetBytes("Vyp2")
'priradi se hodnota promenne
povel
TCP_klient_makej()
'zavolani procedury (metody)
TCP_klient_makej()
End
Sub
Private
Sub
TCP_klient_makej()
server = TextBox1.Text
'priradi se hodnota promenne
server z TextBox1
Dim
client As
New
TcpClient(server, port)
'deklaruje a otevýe nov‚ho TCP
klienta
Dim
stream As
NetworkStream = client.GetStream()
'deklaruje nově stream a napojˇ
klienta
stream.Write(povel, 0, povel.Length)
'zapise byty streamu; pocet bytu
je precten z povel.Length
client.Close()
'zavre TCP klienta
End
Sub
End
Class
|
Poznámka:
Náš nový prográmek je náhradou za ten, který
jsme si dříve napsali v Gambas 3 pro Linux. Program vypadal takto
- viz vpravo, tlačítka mají obdobný význam.
Původním prográmkem jsme mohli ovládat z
Linuxu, novým to jde i z Windows.
|
 |
Klient spuštěný pod Windows (funguje to,
ale pozor, musíte zadat správně IP adresu do TextBox1, při
neexistující se to podělá)

Domácí úkol
Výše (nad obrázkem) jsem uvedl, že se program podělá, protože není
ošetřena tzv. výjimka. Pokuste se výjimku ošetřit.
Poznámky:
1. Jak rád mnohokrát uvádím, programování je
společenská věda. Je důležité zjistit, jak to programátoři, kteří píší
metody, mysleli. Naučili jsme se porozumět velice zajímavé metodě:
povel = System.Text.Encoding.ASCII.GetBytes("Zap1"),
která nám udělá pole bajtů z proměnné typu řetěz (konkrétně "Zap1",
"Zap2", "Vyp1", "Vyp2"). To se nám bude hodit.
2. Metoda stream.Write(povel, 0, povel.Length), je také zajímavá,
zapíše nám bajty z proměnné povel do tzv. streamu.
3. Konečně je zajímavý i způsob streamování, konkrétně, jak se stream
dostává do TCP Socketu.
4. No, zvládli jsme to i bez komponenty TCP Socket v Toolboxu, zvládli
jsme to v ještě přehledném Visual Basic Express 2008 a byla to "makačka
na bednu",
protože jsem musel googlovat na webu Microsoft -
zde.
Závěry
1.
Z pedagogického hlediska jsem se snažil ukázat, jak vypadá
programování jednoduchých úloh neprogramátorem (vulgárně "vidlácky").
Každé prostředí je jiné. Dodnes nejsem schopen říci, které by mi bylo
nejbližší. Visual Basic 2008 jsem používal dříve a občas ho používám
dodnes. Před tím jsem používal Visual Basic od verze 1 (Windows 3.11).
Tvrdím, že jde o dobrý produkt, který nás někdy velice mile překvapí,
proto jsem zde uvedl více jednoduchých ukázek. Také tvrdím, že někdy
se nevyhnete téměř detektivní činnosti. Když jsem uvažoval, co popsat,
vzpomněl jsem si na import třídy a syntaxi metod. Tedy věci, kdy jsem
musel googlit. Velmi rychle jsem si zvykl na Gambas. Koupil jsem
tištěnou knihu,
stáhnul příručku a kupodivu mi šla
práce rychle od ruky. Kdo nepotřebuje Windows nebo macOS, pak Gambas
je rychlou, snadno pochopitelnou cestou k cíli. Vřele doporučuji. V
prostředí XOJO najdeme dobře vybavené Toolboxy pro rychlé řešení téměř
všech potřebných situací. XOJO má dobrou dokumentaci, snadno se učíme
novým věcem. Od dříve zmíněných prostředí je přeci jenom trochu jiné.
Odměnou budiž možnost vytvořit jednoduše z jednoho zdrojového kódu
aplikace pro více platforem.
2. Z praktického hlediska jsem se snažil o určitou objektivitu. I když
mě Microsoft občas neskutečně dopálí a na konci roku 2017 mě donutil k
opuštění Windows 10 na PC, které jsem používal u radioamatérské
stanice, chci být objektivní. Pro zkoušky jsem pořídil dvě licence
Win10Pro a nainstaloval je na noteboocích Dell Vostro 3350 a na HP
ProBook 4340. Oba stroje jsem vybavil RAM 8 GB a plotnovými HDD
Western Digital. V obou případech je organizace na disku MBR a zavaděč
Grub2. Od okamžiku, kdy stisknu volbu operačního systému (na obou
strojích jsou 3 až 4), tak Windows 10 naběhnou asi za 20 sekund do
obrazovky s PIN. Pracují stabilně a kromě zbytečných programů a služeb
jim toho až tak nevytýkám na funkcionalitě. Na obou strojích mám
instalováno více vývojových prostředí, ve kterých píšu programy.
Problémy vidím jinde. Konkrétně velký upgrade operačního systému. Prý ho plánuje
Microsoft po 18 měsících. To, co jsem zažil minule - děkuji, nechci.
Naopak, čistá instalace mě překvapila. Trvala necelou hodinu a to
považuji za přijatelné. Možná bude lepší zahodit starý build. Ten nový
si vyzkoušet na jiném disku a pokud bude OK, tak nainstalovat. Zatím u
Windows stále platí ta "největší svoboda", za kterou považuji
okopírování a spuštění jednoduchého exáče (exe souboru). I když s
výrobci antiviráků o ni asi brzo přijdeme. Např. F-Secure se zachoval
jako obyčejný RAMLWARE. Vlastní exáč (tento příklad), který jsem si
zkompiloval jen s použitím prostředků MS, uložil na vlastní server a z
něho stáhnul, tak označil jako nebezpečný malware (ten zkompilovaný na
disku mu nevadil). Pokud profesionální
firmy budou své SAJRAJTWARY vydávat za profesionální programy s
"profesionální" heuristickou analýzou, kterou ve skutečnosti neumí
(kolik virů si už uživatelé stáhli z repozitářů), pak
o tuto svobodu rychle přijdeme. Bohužel. Ale dokud ji máme, tak mne
ještě neopustila síla napsat a nakreslit si pár užitečných a
jednoduchých prográmků. Proto články o tom, jak to dělám a proč to
dělám. Malá ukázka o činnosti
sajrajtwaru nakonec:

Dále nemá smysl komentovat. Byznys je byznys
|