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ší

Nové iPhony Xs budou stát až 43 500 korun. Do Česka dorazí 29. září

Matura Jan: Online #7043

Apple na akci Apple Keynote 2018 představil tři nové iPhony. Nástupce modelu X se jmenuje Xs, zvětšená varianta pak Xs...

To si ještě nikdo nedovolil, nejlepší iPhone je za neuvěřitelnou sumu

iPhone Xs/Xs Max

S nadsázkou, na nejlepší provedení nových iPhonů X bude potřeba hypotéka. Apple nový top model Xs Max s 512 GB paměti ...



Apple má tři nové iPhony. Podporují dvě SIM, ale v Česku to nefunguje

iPhone Xs/Xs Max

Apple letos představil tři nové iPhony, které navazují na loňský model X. Úplně nových smartphonů od Applu se ovšem...

T-Mobile přidává k tarifům data navíc. Na prodejně ovšem nepochodíte

T- Mobile.

Není pochyb, že se boj o zákazníky z hlasových služeb přesunul do oblasti mobilních dat. Potvrzuje to i aktuální akční...

Konkurence se trefuje do „předražených“ nových iPhonů

Všechny tyto produkty Xiaomi stojí stejně, jako nový model iPhone Xr

Na vysoké ceny novinek od Applu reagovali konkurenti poněkud posměšnými nabídkami. Ukazují v nich, co všechno z jejich...

Další z rubriky

Na dovolené se můžete seznámit i nespálit

Ilustrační snímek

Na dovolenou si bereme kde co, ovšem počítač/notebook často zůstává doma. Ten je na jedné straně prostředkem k...

Bez reklamy ani ránu. Bude už i na Facebook Messengeru v mobilu

Mobilní Messenger projde změnou, k nelibosti uživatelů v něm budou cílené...

Oblíbený mobilní kecálek se brzy promění. Facebook totiž do Messengeru po úspěšném testování implementuje cílené...

Tyto aplikace vám řeknou vše o počasí. Vyberte si pro vás tu pravou

Ilustrační snímek

Nástroje, které vám pomohou zjistit, jaké bude počasí, jsou v mobilu mnohdy neocenitelným pomocníkem. Vybrali jsme ty...

Najdete na iDNES.cz