Klávesové zkratky na tomto webu - základní
Přeskočit hlavičku portálu

S Palm Piloty na internet snadno a rychle (5)

aktualizováno 
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ší

iPhone SE 2 má být už v květnu. Takto by měl vypadat

Údajný iPhone SE 2.

iPhone SE byl představen před dvěma roky, jeho design je pak vyloženě zastaralý. Vychází z šest let starého modelu....

V sobotu koupíte smartphony Xiaomi za 399 Kč a sluchátka za korunu

Sleva

Čínské Xiaomi od loňska oficiálně působí v Česku a po několika stáncích otvírá i plnohodnotný obchod. První zákazníci...



Obchod pětiletky finišuje. Spojení Vodafonu a UPC ovlivní i trh v Česku

Vodafone jedná o převzetí operátora UPC

Vodafone by měl v nejbližší době koupit některé evropské pobočky Liberty Global. Obchod se týká i Česka, znamenalo by...

Drsná metoda autoškoly, žáci museli položit své mobily na silnici

Neobvyklý způsob učení parkování v čínské autoškole

V čínské autoškole vymysleli originální způsob, jak naučit studenty velmi opatrně zaparkovat. Na čáry vyhrazené pro...

Nejnovější smartphone od Samsungu se nedokáže připojit k internetu

Samsung Galaxy J2 Pro ve verzi bez internetu

Samsung připravil smartphone, který by u nás ocenili možná jen senioři. Případně ti, kteří se obávají možného zneužití...

Další z rubriky

Online randění pozastaveno. Facebook nechtěně odstřihl uživatele od Tinderu

Aplikace Tinder

Změna bezpečnostních nastavení Facebooku v reakci na nedávné skandály s úniky dat má celkem závažný důsledek pro ty,...

Google loni zlikvidoval 700 tisíc aplikací

Mobilní aplikace

Z aplikačního obchodu Google Play bylo loni odstraněno 700 tisíc aplikací, většina zmizela prakticky ihned po umístění...

Sem chodí smartphony umřít. Aplikaci lze použít jen s vybitou baterií

Die With Me

Aplikace s názvem Umři se mnou má velmi neobvyklé omezení. Nemůžete ji zapnout, pokud máte telefon nabitý víc než na...



Najdete na iDNES.cz