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

Ilustrační snímek
Geniální iPhonová finta. Odvezl si telefony za milion a čtvrt

Neobvyklou krádež řeší od 14. září newyorská policie. Pátrá po identitě muže, který si ze značkové prodejny Applu odvezl tři krabice plné iPhonů. Vydal mu je...  celý článek

KRACK: Key Reinstallation Attacks
Nepříjemné překvapení: I vaše wi-fi je zranitelná, odhalili experti

Bezpečnostní odborníci varují: zabezpečení bezdrátového připojení wi-fi pomocí WPA2 nelze považovat za bezpečné. Výzkumníci upozorňují, že zranitelností...  celý článek

Ilustrační snímek
Dovolená v Egyptě je vyšla draho. Operátor chtěl téměř 80 tisíc

Deset srpnových dní strávených v Egyptě se britskému páru výrazně prodražilo. Důvodem nebyly ovšem neplánované výdaje v místě pobytu, překvapení přišlo až po...  celý článek

iPhone 8 zakusil i klasickou ohybovou zkoušku. A uspěl, k nevratným deformacím...
iPhone 8 bodoval v crashtestech. Youtuber jej neohnul

Ve vodách chytrých telefonů známý youtuber Zachary Nelson prověřil sérií zatěžkávacích testů zbrusu nový iPhone 8. Telefonu uštědřil nespočet škrábanců,...  celý článek

Huawei Mate 10 Pro
Tak nízkou cenu nikdo nečekal. Huawei Mate 10 Pro zatopí konkurenci

Huawei představil v Mnichově nový špičkový smartphone Mate 10. Překvapí hned v několika ohledech. Stejně jako nové iPhony má neuroprocesor, který se sám učí,...  celý článek

Další z rubriky

Ilustrační snímek
Nikam nevolali, přesto mají platit tisíce. Oškubala je „astro aplikace“

Tváří se jako rozšíření oblíbené mobilní hry, ve skutečnosti však ukrývá škodlivý kód. Ten bez vědomí uživatele uskutečňuje hovory na audiotexové linky, které...  celý článek

Záchranná služba představila ve středu oficiální mobilní aplikaci, pomůže...
Aplikaci české záchranky používá už 330 tisíc lidí, čekají ji vylepšení

Aplikaci Záchranka, která v naléhavých případech umožňuje přivolat si pomoc přes mobil, čekají v dubnu inovace. Spustí se zdokonalené funkce pro neslyšící a...  celý článek

Ilustrační snímek
Na dovolené se můžete seznámit i nespálit

Na dovolenou si bereme kde co, ovšem počítač/notebook často zůstává doma. Ten je na jedné straně prostředkem k pohodlnému přístupu k informacím, na druhé pak k...  celý článek

Najdete na iDNES.cz



mobilní verze
© 1999–2017 MAFRA, a. s., a dodavatelé Profimedia, Reuters, ČTK, AP. Jakékoliv užití obsahu včetně převzetí, šíření či dalšího zpřístupňování článků a fotografií je bez souhlasu MAFRA, a. s., zakázáno. Provozovatelem serveru iDNES.cz je MAFRA, a. s., se sídlem
Karla Engliše 519/11, 150 00 Praha 5, IČ: 45313351, zapsaná v obchodním rejstříku vedeném Městským soudem v Praze, oddíl B, vložka 1328. Vydavatelství MAFRA, a. s., je členem koncernu AGROFERT.