Funkce k zpracování uživatelem zadané adresy počítače
Vyhodnocujeme-li uživatelem zapsanou adresu v síti internet, je výhodné nejprve zkontrolovat, zda uživatel nezadal v políčku přímo platnou IP adresu. Pokud ano, není potřeba posílat dotaz DNS serverům a pomocí funkce NetLibAddrAToIN() pouze převedeme IP adresu zapsanou v řetězci na její numerickou hodnotu.
Voláme-li funkci NetLibGetHostByName(), musíme zkontrolovat vrácenou hodnotu. Je-li nulová, došlo při hledání IP adresy počítače k chybě. V jednoduchých programech nemusíme vyhodnotit kód chyby - stačí nám vědět, že funkce NetLibGetHostByName() selhala a počítač nebyl nalezen. Píšeme-li složitější program, ve kterém záleží na rozlišení důvodu, zkontrolujeme proměnnou chyba, abychom věděli, proč se hledaný počítač nepovedlo najít (například zda uživatel zavěsil telefon nebo zda je hledaný počítač nedosažitelný).
V případě, že funkce NetLibGetHostByName() vrátí nenulovou hodnotu, přečteme ze struktury NetHostInfoBufType hodnoty IP adres, vrácené oběma nameservery. Příklad kódu je v následujícím rámečku:
static NetIPAddr SitNajdiPocitac(Char* jmeno) { NetIPAddr adresa; NetHostInfoPtr HostInfoPtr; NetHostInfoBufType HostInfoBuf; Err chyba; UInt16 i; // Defenzivní kódování - kontrolujte své chyby ... if(!gKnihovnaNahrana) { return -1L; } adresa = NetLibAddrAToIN(gNetLibReference, jmeno); if(adresa != -1) { // V policku byla zadana primo IP adresa return adresa; } else { // V policku bylo zadano jmeno pocitace HostInfoPtr = NetLibGetHostByName(gNetLibReference, jmeno, &HostInfoBuf, DOBA_CEKANI, &chyba); if(!HostInfoPtr) { return -1L; } // Prohledame hodnoty vracene obema nameservery for(i = 0; i < netDNSMaxAddresses; i++) { if(HostInfoBuf.address[i] != NULL && HostInfoBuf.address[i] != -1L) { return HostInfoBuf.address[i]; } } return -1L; } } |
Konstanta netDNSMaxAddresses udává, kolik adres DNS serverů je možné na počítači Palm Pilot zadat v panelu Nastavení. Na všech modelech počítačů Palm Pilot má tato konstanta zatím hodnotu 2. Adresa vrácená prvním DNS serverem je v poli address[0] a adresa vrácená druhým serverem je v poli address[1]. Pokud se DNS serveru nepodařilo počítač vyhledat, je v příslušném prvku pole address hodnota NULL nebo hodnota -1L.
Kódy chyb
Všechny součásti operačního systému počítačů Palm Pilot a kompatibilních používají jednotné číselné kódy chyb, ke kterým může dojít za běhu programu. V naší aplikaci nemusíme ošetřit všechny chyby, které mohou nastat - většinou stačí jen sdělit uživateli, že k chybě došlo. Pokud potřebujeme zobrazit podrobnosti o chybě, můžeme použít funkci SysErrString().
Char* SysErrString(Err chyba, Char *buffer, UInt16 maxDelka) Vrátí popis chyby. | |
Vstupní parametry |
|
Výstupní parametry |
|
Vrácená hodnota |
|
Funkce SysErrString() uloží do řetězcové proměnné text, který odpovídá číslu chyby, které jí předáme. Možné využití funkce SysErrString() je v rámečku.
... HostInfoPtr = NetLibGetHostByName(gNetLibReference, jmeno, &HostInfoBuf, DOBA_CEKANI, &chyba); if(!HostInfoPtr) { Char text[100]; SysErrString(chyba, text, 100); FrmCustomAlert(UpozorniNaChybu, text, NULL, NULL); return -1L; } ... |
U počítačů s verzí PalmOS vyšší než 4.0, kde je možné používat překryvné moduly (overlays) budou chybová hlášení česká, u ostatních modelů budou anglická. Pokud parametr chyba označuje neexistující chybu, bude obsahem textové proměnné jen hexadecimální číslo (číslo chyby) v závorce.
Program pro vyhledání IP adresy
Funkci SitNajdiPocitac() využijeme v našem dalším programu, který bude sloužit k vyhledávání IP adres počítačů. Jeho zdrojové kódy najdete zde.
Funkce programu bude jednoduchá. Na displeji bude tlačítko pro připojení do sítě internet. Aktivujeme-li jej, změní se text v tlačítku na "Odpojit" a jeho dalším stisknutím se od sítě internet odpojíme (ve skutečnosti jsou ve formuláři tlačítka dvě přes sebe, ale viditelné z nich je jen jedno).
Je-li síť připojena, tak do určeného políčka vyplníme jméno počítače a stiskneme tlačítko "Hledej". Po krátké době se na displeji objeví IP adresa hledaného počítače, kterou vrátí funkce SitNajdiPocitac().
Pokud zadáte jméno neexistujícího počítače, nepodaří se jeho IP adresu nalézt a na displeji se objeví zpráva "Adresa nenalezena" jako na obrázku nahoře. Dojde-li k chybě, bude na displeji zobrazen kód chyby.
Příště si uvedeme, jak vytvořit na počítači Palm Pilot přípojné místo, které můžeme využít pro síťovou komunikaci - port.