UDP – 3. rész

 

Tiszteletem a Kedves Olvasóközönségnek!

 

Elérkeztünk rövidke sorozatunk utolsó epizódjához: Teljes értékűvé tesszük kedves kis üzenetküldő programunkat.

Kezdjük – hogy mindjárt az elején összekavarjak mindenkit J - ez előző rész felsorolásának végéről: A „szonár”.

 

A „szonár” nem más, mint egy olyan kis segédeljárás, amellyel detektálhatjuk, kik futtatják még rajtunk kívül a programot, illetve a csatlakozott beszélgetőpartnerek közül kik vannak még jelen (Elvileg kijelentkezünk, de mi van, ha elcsattant egy RESET?). Ehhez szükség van a „mindenki” ismeretéhez.

 

A „mindenki” egy olyan IP cím, ami egy adott csoporton belüli összes gépet érint. A mi IP címünk végén egy 255 azt jelenti, hogy nálunk minden gép meg fogja kapni az üzenetet. Például: Saját címünk legyen 111.111.111.113. Ezen a tartományon belüli összes gépet érintő cím: 111.111.111.255, tehát az összes gép, aminek IP címe 111.111.111-el kezdődik. Ha ráéreztünk erre, rájövünk, hogy ennek igen nagy jelentősége van. A „szonár” esetében nincs tehát más dolgunk, csak kiküldünk „mindenkire” egy olyan parancsot, amire egy meghatározott választ küld az összes gép. Ezt a felhasználónak nem is kell látnia, de mondjuk egy gomb OnClick eseményéhez rendelve saját maga is előidézhet egy „szonár”-t. Egy ilyen jelet kiküldhetünk a program indulásakor is, a beérkezett válaszok IP címét eltárolhatjuk egy listában (pl. egy ListBox), így láthatjuk kiknek firkálhatunk (így olyan lesz mint irc-n a jobb oldali rész, ahol a csatlakozott emberek vannak). Hozzáadhatunk egy „mindenki” feliratot is, így közös beszélgetést is folytathatunk, ha pedig kijelölünk egy embert a listából, akkor privát „szoba” nyílik. Ezt kombinálhatjuk egy szintén irc-ben megszokott ablakos módszerrel (a privátok saját ablakot kapnak), és egy hasonló program a végeredmény (persze azért kisebb tudással). Szóval minden egyes „szonár” esetén frissítsük a bejelentkezettek listáját és kész.

A „szonár”-t automatizálhatjuk is, ekkor egy Timer segítségével bizonyos időközönként végrehajthatjuk az eljárást, így a fent említett RESET után is előbb-utóbb (az időzítéstől függ) rájövünk, kivel nem kell dumcsizni, mert ha valakit nem találunk, egyszerűen kivesszük a listából.

 

Naplózás: Nem nagy dolog, viszont hasznos és látványos lehet. Lehet mondjuk egy Memo, amibe a bejelentkező vagy távozó felhasználókat írhatjuk. Elláthatjuk idővel (mikor lépett be/ki), és már meg is van a hasznossága. Ismét utalnék az irc-re, ott ugyebár mindig üdvözölnek, ha belépsz, így mindenki látja, hogy megérkeztél. Ez is valami hasonló.

 

Saját IP cím és név detektálása: Három módszer is van rá: az egyik egy-két API hívás, amibe most nem mennék bele, mert egy picit hosszú (a példaprogramban ez van, néhány kulcsszó: WSAStartUp, GetHostName, GetHostByName), a másik pedig az IndyMisc fülön található IdIPWatch komponens, melynek LocalName és LocalHost függvényeivel is lekérdezhetjük ezeket. Fontos, hogy az API hívás biztos módszer, a másik pedig csak az elsődleges hálózat adatait adja vissza. Harmadik a registry, ehhez jó egészséget és regeditet kívánok mindenkinek, a különböző Windows-ok registryje ugyanis nem azonos.

 

Nos ez is megvan. Talán még egy-két apró probléma merülhet fel, bár az első talán egy kicsit túl van ragozva: Mi van akkor, ha kétféle (vagy több) ilyen program is fut a hálózaton, mindkettő tudja a megfelelő műveleteket, de más protokollt használ? Mivel minden protokollt nem ismerhetünk (hiszen a mienket is csak hasraütésszerűen találtuk ki), ennek a legegyszerűbb megoldása, ha beépítünk egy újabb EditBox-ot, amibe a beírt adatokat gombnyomáskor nem alakítjuk át, hanem direktben elküldjük. Ezt még mixeljük új IP címes, és Port-os EditBox-szal és kész a koktél. Így ha tudjuk valamely másik progi protokollját, akkor ide egy az egyben beírhatjuk az üzenetet. Mellesleg saját programunk tesztelésére sem rossz.

Talán egy kicsit kézenfekvőbb probléma, hogy az UDP miatt nem tudhatjuk, hogy megérkeztek-e a küldött adatok. Semmi gond, ha kapunk valamit, küldjük vissza a feladónak, pl.: hogy OK (pl.: #0AnTi#ok)! Ha OK-t kapunk, írjuk ki, hogy megkapta az üzenetet. És ez már egy parancs. Hasonlókat használhatunk ha bejelentkezünk (küldhetjük mindenkinek, hogy #0AnTi#login), stb. Így már láthatjuk, van értelme a parancsoknak is. Ezek segítségével tovább bővíthetjük programunk tudását. Csak egy ötlet: Küldhetünk egy #0AnTi#keres#C:\*.*-ot is, és ha „keres” parancsot kapunk az üzenet részben megadott helyen keresünk valamit, stb.

 

Remélem sikerült megmozgatnom fantáziátokat! A következő hónapban egy nagyon érdekes és komplex feladatot próbálunk megoldani, azonban ez legyen titok. Annyit elárulhatok, hogy érdemes lesz elolvasni

 

Addig chat-eljetek egymással! Továbbra is várom a leveleket, kérdéseket, kéréseket!

 

Üdv!

AnTi - anti.gamf@freemail.hu