Premium

Získejte všechny články
jen za 89 Kč/měsíc

S Palm Piloty na internet snadno a rychle (5)

Pátým dílem se vracíme k naší malé sérii na téma Palm a internet. Dnes si uvedeme příklad použití funkce vyhledávající počítač podle jména.

Errata: do minulého dílu se dostala chyba: délka adresy IPv6 je 128 bitů, nikoliv 48 bitů, jak jsem uvedl. Děkuji všem pokročilým čtenářům, kteří i přes varování četli část pro začátečníky a na chybu mne upozornili.


Nalezení IP adresy počítače

Numerickou hodnotu IP adresy v síti internet zjistíme dotazem u DNS serveru (zkratka z Domain Name Service = Správa jmen v doméně), který nám určil poskytovatel internetových služeb. Panel síťového nastavení počítačů Palm Pilot dovoluje zadat adresy hned dvou DNS serverů.

Nebudeme si uvádět detailní popis toho, jak přesně probíhá výměna dat mezi operačním systémem PalmOS a DNS servery, protože to vše je "uzavřeno" ve funkci NetLibGetHostByName(). Soustředíme se na použití funkce NetLibGetHostByName() v naší aplikaci.

Zavoláme-li funkci NetLibGetHostByName(), je zaslán dotaz se jménem počítače oběma nastaveným DNS serverům a funkce čeká určitou dobu (podle parametru timeout) na odpověď. Pokud během nastavené doby přijde alespoň od jednoho DNS serveru kladná odpověď, funkce NetLibGetHostByName() vrátí nenulovou hodnotu a ve struktuře NetHostInfoBufPtr, jejíž adresu jsme funkci předali, je uložena nalezená IP adresa.

Vrátí-li funkce NetLibGetHostByName() nulovou hodnotu, došlo k chybě při vyhledávání počítače a v proměnné chyba je uložen kód chyby. Typické volání funkce NetLibGetHostByName() je následující:

NetHostInfoPtr hostinfo;
NetHostInfoBufType buffer;
Err chyba;
    
hostinfo = NetLibGetHostByName(gNetLibReference, jmeno, &buffer, 5 * sysTicksPerSecond, &chyba);

if(hostinfo)
{
    for(i = 0; i < netDNSMaxAddresses; i++)
    {
        if(buffer.address[i] != NULL && buffer.address[i] != -1L)
        {
            IP_adresa = buffer.address[i];
        }
    }
}

Parametr timeout označuje dobu čekání na odpověď DNS serveru jako počet tiknutí vnitřních hodin počítačů Palm Pilot (100x za vteřinu). Je pružnější uvádět hodnotu čekání ve vteřinách; proto je v hlavičkových souborech definována konstanta sysTicksPerSecond; výraz 5*sysTicksPerSecond označuje pět vteřin.

Parametr buf ukazuje na strukturu NetHostInfoBufType, ve které jsou uloženy nalezené informace o hledaném počítači. Z důvodu kompatibility s operačním systémem UNIX obsahuej tato struktura dvě základní části:

  1. vnořenou strukturu NetHostInfoType, která je kompatibilní se strukturou hostent v hlavičkových souborech operačního systému UNIX
  2. - oficiální jméno hledaného počítače v poli name
    - další jména tohoto počítače (aliasy) v polích aliasList a aliases
    - IP adresy hledaného počítače vrácené oběma DNS servery uložené v poli address[netDNSMaxAddresses]

Funkce NetLibGetHostByName() vrací ukazatel na strukturu NetHostInfoType z důvodu snadného přenosu programů z operačního systému UNIX. Tuto strukturu vyplní PalmOS ukazateli na data uložená ve struktuře NetHostInfoBufType.

V našich programech, které jsou psány pouze pro PalmOS, budeme využívat - tam, kde to bude možné - funkce a struktury, které jsou specifické pro PalmOS. Zájemce o programování internetových aplikací na Palm Pilotech znovu odkazuji na základní manuály programování sockets v operačním systému UNIX/Linux - funkce i použití jsou zcela stejné.

V praxi však potřebujeme funkci pro hledání počítače ještě rozšířit. Uživatel totiž do políčka pro jméno počítače může zadat přímo IP adresu. V takovém případě by volání funkce NetLibGetHostByName() skončilo neúspěchem. Proto musíme ještě předtím otestovat, zda v políčku není přímo IP adresa. Nemusíme sami programovat funkci na čtení IP adres, tato funkce je již v PalmOS obsažena.

NetIPAddr NetLibAddrAToIN(UInt16 refCislo, Char *adresa)

Pokusí se převést IP adresu z textové podoby na číselnou

Vstupní parametry
  • refCislo - referenční číslo knihovny Net.lib
  • adresa - textová proměnná, obsahující IP adresu - čtyři čísla oddělená tečkami (například 62.23.34.10)
Vrácená hodnota
  • -1 - v parametru adresa nebyla uložena platná IP adresa počítače
  • numerickou hodnotu IP adresy, která byla v parametru adresa

Protipólem funkce NetLibAddrAToIN() je funkce NetLibAddrINToA(), která převede numerickou IP adresu do její textové podoby. Použití obou funkcí je jednoduché a neskrývá žádné záludnosti.

Char* NetLibAddrINToA(UInt16 refCislo, NetIPAddr adresa, Char *buf)

Převede IP adresu z numerické do textové podoby.

Vstupní parametry
  • refCislo - referenční číslo knihovny Net.lib
  • adresa - proměnná obsahující numerickou hodnotu IP adresy
Výstupní parametry
  • buf - textová proměnná, do které bude uložen výsledek; tato proměnná musí mít délku nejméně 16 znaků
Vrácená hodnota
  • ukazatel na parametr buf

Zpracováváme-li data z políčka označeného jako "adresa počítače", musíme nejprve zkontrolovat voláním funkce NetLibAddrAToIN(), zda uživatel do políčka nezadal přímo IP adresu. Až pokud funkce NetLibAddrAToIN() vrátí hodnotu -1, budeme volat funkci NetLibGetHostByName(), která se dotazuje DNS serverů na IP adresu počítače.


Příště si vytvoříme druhý program - program na nalezení IP adresy počítače na internetu.

  • Nejčtenější

Spotem s Trojanem na horách operátor popudil Poláky. Nerozuměli nadsázce

21. dubna 2024  8:01

Po dvojici Vojtěch Kotek a Lukáš Pavlásek, k níž později přibyl Jakub Kohák, vsadil T-Mobile ve...

Je to už spíš foťák s mobilem a opravdu se povedl. Test Xiaomi 14 Ultra

21. dubna 2024

Prémiový smartphone Xiaomi 14 Ultra působí mezi současnou nabídkou mobilů jako unikát. Jaký jiný...

{NADPIS reklamního článku dlouhý přes dva řádky}

{POPISEK reklamního článku, také dlouhý přes dva a možná dokonce až tři řádky, končící na tři tečky...}

Toto zařízení mělo nahradit mobily. V recenzích se mu vysmáli

23. dubna 2024

Novinka s názvem Humane AI Pin se zdála být převratným zařízením. V mnoha ohledech měla nahradit...

Vodafone měl výpadek, někteří zákazníci se nemohli dovolat

25. dubna 2024  10:03,  aktualizováno  10:15

Síť mobilního operátora Vodafone postihl ráno výpadek. Týkal se části zákazníků, kteří se nemohli...

{NADPIS reklamního článku dlouhý přes dva řádky}

{POPISEK reklamního článku, také dlouhý přes dva a možná dokonce až tři řádky, končící na tři tečky...}

Operátoři zahušťují pokrytí Česka signálem 5G. Máte ho doma? Podívejte se

20. dubna 2024

Premium V červenci to budou již čtyři roky, co byla v Česku spuštěna první komerční 5G síť. Zatímco v...

Hlasujte o nejlepší sportovní fotku. Vyberete tak vítěze smartphonu vivo

26. dubna 2024

Soutěž o úplnou novinku, smartphone vivo V40 SE s bohatou výbavou nebo podepsaný dres...

Xiaomi už se nebude držet zpátky. Pro řadu T chystá další prémiové funkce

26. dubna 2024

Smartphony řady T od Xiaomi mají vždy parádní výbavu, ale zároveň i pár kompromisů, aby trochu...

Vodafone měl výpadek, někteří zákazníci se nemohli dovolat

25. dubna 2024  10:03,  aktualizováno  10:15

Síť mobilního operátora Vodafone postihl ráno výpadek. Týkal se části zákazníků, kteří se nemohli...

Toto mohl být nevídaný smartphone. Myšlenku však nakonec poslali k vodě

25. dubna 2024

S takovým smartphonem bychom už nikdy nemuseli řešit, že se zpomaluje, nemá dostatek paměti či je...

Bývalý fitness trenér Kavalír zrušil asistovanou sebevraždu, manželka je těhotná

Bývalý fitness trenér Jan Kavalír (33) trpí osmým rokem amyotrofickou laterální sklerózou. 19. dubna tohoto roku měl ve...

Herečka Hunter Schaferová potvrdila románek se španělskou zpěvačkou

Americká herečka Hunter Schaferová potvrdila domněnky mnoha jejích fanoušků. A to sice, že před pěti lety opravdu...

Největší mýty o zubní hygieně, kvůli kterým si můžete zničit chrup

Možná si myslíte, že se v péči o zuby orientujete dost dobře, přesto v této oblasti stále ještě existuje spousta...

Tenistka Markéta Vondroušová se po necelých dvou letech manželství rozvádí

Sedmá hráčka světa a aktuální vítězka nejprestižnějšího turnaje světa Wimbledonu, tenistka Markéta Vondroušová (24), se...

Za vytlačení z linky do Brna musí Student Agency zaplatit náhradu 21 milionů

Společnost Student Agency provozující autobusy a vlaky pod označením RegioJet musí zaplatit bývalému konkurentovi 21...