Mendelova univerzita v Brně Provozně ekonomická fakulta
Dálkové ovládání PC mobilním zařízením s podporou jazyka Java Bakalářská práce
Vedoucí práce: Ing. Petr Jedlička, Ph.D.
Jakub Strnad
Brno 2011
2 Prostor pro stránku zadání
Rád bych poděkoval vedoucímu mojí bakalářské práce, panu Ing. Petru Jedličkovi Ph.D., za rady kterých, jsem využil při vypracování této práce.
Prohlašuji, že jsem tuto práci vypracoval samostatně, s využitím literatury a dalších zdrojů uvedených v seznamu.
V Brně dne 3. ledna 2011
....................................................
5
Abstract Strnad, J. Remote control of PC using mobile device with Java language support. Bachelor thesis. Brno, 2010. This bachelor’s thesis deals with the design and implementation of an application running on a mobile device with Java support for remote control of PC via Bluetooth, WiFi and other wireless technologies.
Abstrakt Strnad, J. Dálkové ovládání PC mobilním zařízením s podporou jazyka Java. Bakalářská práce. Brno, 2010. Tato bakalářská práce se zabývá návrhem a implementací aplikace běžící na mobilním zařízení s podporou jazyka Java, určené pro dálkové ovládání osobního počítače pomocí bezdrátových technologií Bluetooth, WiFi a dalších.
6
OBSAH
Obsah 1 Úvod a cíl práce 1.1 Cíl práce a metodika . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Programovací jazyk Java 2.1 Platforma Java SE . . . . . . . . . . . . . . . . . . . . . 2.2 Platforma Java ME . . . . . . . . . . . . . . . . . . . . . 2.2.1 Connected Device Configuration (CDC) . . . . . 2.2.2 Connected Limited Device Configuration (CLDC) 2.2.3 Mobile Information Device Profile (MIDP) . . . . 2.2.4 MIDP 2.0 (JSR 118) . . . . . . . . . . . . . . . . 2.2.5 Rozšiřující balíčky knihoven . . . . . . . . . . . . 2.2.6 MIDlet a jeho životní cyklus . . . . . . . . . . . . 2.3 Vývojové nástroje pro Java ME . . . . . . . . . . . . . . 3 Bluetooth 3.1 Bluetooth protokoly a vrstvy . . . . . . . . . 3.2 Bluetooth profily . . . . . . . . . . . . . . . 3.3 Podpora technologie Bluetooth v jazyce Java 3.3.1 Knihovna BlueCove . . . . . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . . . . . . .
. . . .
. . . . . . . . .
. . . .
. . . . . . . . .
. . . .
. . . . . . . . .
. . . .
. . . . . . . . .
. . . .
. . . . . . . . .
. . . .
7 8
. . . . . . . . .
9 9 9 10 11 12 14 15 15 16
. . . .
18 19 20 20 21
4 Dostupná řešení vzdáleného ovládání počítače 4.1 Remote framebuffer (RFB) . . . . . . . . . . . . 4.2 SSH (client) . . . . . . . . . . . . . . . . . . . . 4.3 Teamviewer . . . . . . . . . . . . . . . . . . . . 4.4 Remote Desktop Protocol (RDP) . . . . . . . . 4.5 Ovládání konkrétní aplikace . . . . . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
22 22 22 22 22 23
5 Návrh řešení a implementace 5.1 Popis klientské aplikace . . . . . 5.2 Popis serverové aplikace . . . . 5.3 Implementace klientské aplikace 5.4 Implementace serverové aplikace
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
24 24 27 28 33
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
6 Závěr práce 34 6.1 Možnosti rozšíření . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 6.2 Závěr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 7 Reference
36
Přílohy
38
A Flow diagram klientské části aplikace
39
1
1
ÚVOD A CÍL PRÁCE
7
Úvod a cíl práce
Vývoj v oblasti informačních technologií v poslední době směřuje čím dál tím více k mobilním řešením. Tento trend lze pozorovat například na rostoucí oblibě notebooků, ale také méně výkonných netbooků a tabletů. Notebooky nejsou však pro některé účely dostatečně mobilní, menší a přenosnější zařízení jsou zase omezena svým výkonem a velikostí displeje, takže jsou využívány spíše jako doplněk k výkonnějšímu počítači. Často tedy vzniká potřeba využívat na cestách i data a případně i další prostředky počítače, který je využíván jako hlavní. Tento problém lze řešit s využitím vzdáleného přístupu k tomuto počítači pomocí nějakého jiného, často méně výkonného, zařízení. Pro tento účel lze využít výše zmíněná zařízení, jako jsou netbooky a tablety, ovšem tato zařízení stále ještě nemá každý, případně je nemá vždy u sebe. Zařízením, které má u sebe v dnešní době prakticky každý, je mobilní telefon. Pokud pomineme nejnižší modelové řady telefonů poskytující pouze ty nejzákladnější funkce, jako jsou hlasové hovory a textové zprávy, lze mobilní telefony využít i k pokročilejším účelům. Většina dnešních mobilních telefonů umožňuje rozšiřování funkčnosti pomocí aplikací třetích stran. Tyto aplikace mohou být buď určeny pro konkrétní typ operačního systému, nebo univerzální, které lze spustit na většině mobilních telefonů. Tímto univerzálním řešením jsou aplikace psané v jazyce Java. Některé novější telefony vybavené operačním systémem (tzv. smartphony) bohužel od podpory Java aplikací často upouštějí, ve většině případů však lze podporu přidat pomocí nějaké nativní aplikace (aplikace určené pro konkrétní operační systém). Aplikace napsané v jazyce Java jsou proto na poli mobilních zařízení v současné době nejuniverzálnějším řešením. Protože mobilní telefon, na rozdíl od větších zařízení typu netbook či tablet, vlastní prakticky každý a také ho nosí téměř pořád u sebe, přímo se nabízí možnost využít ho k výše zmíněnému vzdálenému ovládání počítače.
1.1
1.1
Cíl práce a metodika
8
Cíl práce a metodika
Cílem této bakalářské práce je navrhnout a poté realizovat aplikaci pro vzdálené ovládání počítače s využitím mobilního zařízení, umožňujícího běh aplikací v jazyce Java. K dosažení stanoveného cíle je nutno nejprve se seznámit obecně s programovacím jazykem Java. Především pak ale se specifiky a možnostmi vývoje aplikací určených pro běh na mobilních zařízeních. V neposlední řadě je také potřeba se seznámit s bezdrátovou technologií Bluetooth a jejím použitím a implementací v aplikacích naprogramovaných v jazyce Java. Důležitým krokem je také zmapování již dostupných řešení pro vzdálené ovládání počítače pomocí mobilního zařízení. Na základě všech těchto informací bude navržen způsob, jak tento úkol efektivně řešit. Následně bude aplikace realizována s využitím možností poskytovaných jazykem Java. V realizaci bude kladen důraz především na tu část aplikace, která bude provozována na mobilním zařízení a bude tedy poskytovat hlavní rozhraní mezi uživatelem a ovládaným počítačem.
2
PROGRAMOVACÍ JAZYK JAVA
2
9
Programovací jazyk Java
Programovací jazyk Java se původně nazýval Oak a byl navržen pro použití ve spotřební elektronice. Později, v době rozmachu webu, byl přepracován pro použití ve webových aplikacích a přejmenován na svůj současný název. Od té doby se jazyk značně rozrostl a stal se z něj univerzální, objektově orientovaný jazyk. (Keogh, 2005) Ideovým předchůdcem Javy je jazyk C, resp. jeho objektová podoba C++, která Javě vtiskla její základní podobu. Její návrháři ale dokázali eliminovat řadu chyb z původního C++, a vznikl tak jazyk bez většiny zákeřností pro něj typických. Součástí Javy je tzv. garbage collector, který má za úkol automaticky uvolňovat nepoužívané části paměti. Tím pádem nejsou aplikace napsané v Javě tak náchylné na úniky paměti (memory leaks). (Pitner, 2002) Java je současně překládaná i interpretovaná. Programy v jazyku Java se nejprve přeloží do speciálního tvaru nazývaného bajtkód, který pak analyzuje a interpretuje speciální program zvaný Java Virtual Machine (JVM ). Úkolem virtuálního stroje je nejenom vykonat příslušný program, ale také ho „odstínitÿ od hardwaru a operačního systému na kterém program běží. Virtuální stroj umožňuje, aby jeden a týž program fungoval na různých počítačích a operačních systémech bez nutnosti rekompilace. Pro každou konfiguraci hardwaru a operačního systému lze definovat její vlastní virtuální stroj. (Pecinovský, 2008) Protože jazyk Java lze používat na různých zařízeních a pro různé účely, dělí se na tzv. platformy. Jde především o platformy Java SE, Java EE a Java ME.
2.1
Platforma Java SE
Základní edice Javy, dříve označovaná jako J2SE, využívaná pro vývoj aplikací v jazyce Java na osobních počítačích. Pro spouštění těchto aplikací je nutno mít nainstalováno běhové prostředí Java Runtime Environment (JRE), pro vývoj pak Java Development Kit (JDK), což je sada nástrojů a knihoven pro kompilaci zdrojového kódu do bytekódu, který může být spuštěn pomocí JRE. V současné době je nejrozšířenější verze Java SE 6. Existuje již i verze 7, ale ta je stále ještě ve fázi vývoje, a není tedy vhodná pro širší užívání. (Oracle Corporation, 2010)
2.2
Platforma Java ME
Platforma Java ME, dříve označovaná jako J2ME, byla vytvořena, aby se vypořádala s omezeními, spojenými s vývojem aplikací na zařízeních s omezenými zdroji. Mezi ně se řadí především mobilní telefony, ale také PDA, set-top boxy a další tzv. embedded zařízení.
2.2
Platforma Java ME
10
Java ME je tedy technologie vyhovující všem těmto zařízením, ale vzhledem k tomu, že tato zařízení mají značně rozdílný výkon, velikost operační paměti, typ displeje, požadavky na napájení a různou velikost, nebylo by možné je všechny optimálně využít. Pokud by mělo být Java API společné pro všechna tato rozdílná zařízení, musel by se buďto určit „společný jmenovatelÿ funkcí které by tato zařízení mohla využívat, nebo do Java API zaimplementovat všechny možnosti, ale toto řešení by bylo značně neefektivní, protože by byla platforma zbytečně objemná i na zařízeních, která nemohou využít všechny její možnosti z důvodu svých omezení. Z tohoto důvodu vznikly tzv. konfigurace a profily rozdělující zařízení podle jejich možností a účelu. (de Jode, 2005) Konfigurace určuje minimální sadu vlastností JVM a knihoven dostupných pro určitou kategorii zařízení. Je to tedy jakýsi „společný jmenovatelÿ možností Java platformy a knihoven, jejichž podporu mohou vývojáři očekávat na všech zařízeních. V současné době jsou dostupné dvě konfigurace. Connected Device Configuration (CDC) pro výkonnější zařízení a Connected Limited Device Configuration (CLDC) pro méně výkonná zařízení. (Sun Microsystems, Inc. 2000; San Juan, 2006) Pro další dělení zařízení vznikly v rámci konfigurací tzv. profily, které Java API konfigurace rozšiřují a vylaďují na míru konkrétní skupině podobných zařízení. (de Jode, 2005) Profily jsou pro uživatele a vývojáře aplikací důležitější a viditelnější než konfigurace. Definují minimální sadu Java API dostupnou na jednotlivých „rodináchÿ zařízení. Profily jsou postaveny na jednotlivých konfiguracích. Aplikace napsané pro určitý profil jsou přenositelné na jakékoliv zařízení, podporující tento profil. Zařízení mohou podporovat více profilů současně. (Sun Microsystems, Inc. 2000) 2.2.1
Connected Device Configuration (CDC)
CDC je konfigurace určená pro výkonnější zařízení, jako jsou komunikátory, lepší PDA, set-top boxy atd.(Oracle Corporation, 2010) Je navržena tak, aby pokud možno zachovávala kompatibilitu s platformou Java SE, ale zároveň brala ohled na omezené zdroje zařízení, na kterých je provozována. Kompatibilita s platformou Java SE dovoluje vývojářům využít již osvojené dovednosti z vývoje desktopových aplikací. CDC podporuje plnou specifikaci Java virtual machine. Implementace knihoven je pro použití na zařízeních s omezenými zdroji optimalizována. Některé knihovny vycházející z Java SE mají mírně upravené rozhraní, jiné byly vypuštěny úplně. Výsledkem je běhové prostředí, které si perfektně vystačí s 32-bitovým procesorem, 2 MB RAM a 2 MB ROM. (Oracle Corporation, 2005) Pod CDC spadají v současnost 3 profily. Foundation profil, který je založen na standardních knihovnách z Java SE ale neobsahuje žádnou podporu pro GUI. Personal basis profil, který již disponuje částečnou podporou GUI a Xletů, a Personal profil, již s plnou podporu GUI knihoven AWT a appletů. (Oracle Corporation, 2010)
2.2
Platforma Java ME
11
Obrázek 1: Java platforma (MyHowTo.org, 2007)
2.2.2
Connected Limited Device Configuration (CLDC)
CLDC je navržena pro levnější a méně výkonná zařízení, jako jsou mobilní telefony, pagery, osobní organizéry, PDA nižší třídy atd. CLDC nepracuje s Java virtual machine, namísto toho využívá K Virtual Machine (KVM ), což je odlehčená verze JVM, určená pro zařízení s velmi omezenými zdroji. CLDC je zaměřena spíše na aplikační, než systémové programování. Tím je zaručena lepší přenositelnost na rozdílná zařízení a dovoluje implementovat více vysokoúrovňové knihovny. CLDC neposkytuje žádné API specifické pro určitou kategorii zařízení. Hardwarové požadavky CLDC • 16-bitový procesor • 128 kB (160 kB pro CLDC 1.1) stálé paměti pro uložení KVM a CLDC knihoven • 32 kB operační paměti pro běh KVM a aplikací v ní provozovaných (Sun Microsystems, Inc. 2003)
2.2
Platforma Java ME
2.2.3
12
Mobile Information Device Profile (MIDP)
MIDP je profil postavený nad CLDC, určený pro mobilní telefony, levnější PDA a obousměrné pagery. MID profil určuje aplikační model, který umožňuje sdílet omezené prostředky zařízení více MIDP aplikacemi – Midlety. Definuje co to MIDlet je, jaký má mít životní cyklus, jakým způsobem je zabalen, jakou strukturu mají tzv. popisovače aplikace a jak mají být tyto aplikace spouštěny. Možnosti CLDC dále rozšiřuje o podporu uživatelského rozhraní, HTTP komunikace, práce s persistentními uložiti dat a časovačů. Uživatelské rozhraní Knihovny pro tvorbu uživatelského rozhraní nejsou v MIDP řešeny jako podmnožina knihoven AWT nebo Swing z plaftormy Java SE, a to z několika důvodů. Knihovny AWT a Swing jsou přizpůsobeny pro ovládání pomocí ukazovacího zařízení, obvykle myši, a klávesnice. Ovládání aplikací na mobilním telefonu se v tomto velmi odlišuje, klávesnici mají tyto zařízení většinou velmi omezenou, u některých zařízení dokonce chybí úplně. Ukazovací zařízení lze využít pouze na telefonech s dotykovým displejem. Dalším důvodem je fakt, že knihovny AWT a Swing hojně využívají služeb správce oken z operačního systému. Uživatelské rozhraní lze v MIDP řešit dvěma způsoby – vysokoúrovňově a nízkoúrovňově. API pro vysokoúrovňové řešení poskytuje sadu ovládacích a zobrazovacích prvků, jako jsou například tlačítka, textová pole, formuláře, seznamy atd. Přesný vzhled těchto prvků je dán implementací na konkrétním zařízení, programátor tedy nemá úplnou kontrolu nad tím, jak budou tyto prvky ve výsledku vypadat. V případech, kdy programátor požaduje absolutní kontrolu nad výsledným vzhledem uživatelského rozhraní, musí využít nízkoúrovňového řešení. Základním prvkem tohoto řešení je třída Canvas (plátno), do které lze v těle abstraktní metody paint(Graphics g), pomocí metod instance třídy Graphics, „kreslitÿ. Tato metoda je provedena, a tím překreslen obraz, při zavolání metody repaint(). Jde o neblokující, asynchronní, metodu, takže k překreslení nemusí dojít okamžitě po jejím zavolání. Blokující alternativou je metoda serviceRepaints(). Události Interakce uživatele s ovládacími prvky vyvolává tzv. události (events), na které aplikace reaguje zavoláním příslušné callback metody, která událost nějakým způsobem obsluhuje. Podobně jako ovládací prvky GUI, i události se dělí na nízkoúrovňové a vysokoúrovňové. Vysokoúrovňové události se používají ve spojení s vysokoúrovňovými prvky GUI a jsou řešeny takzvanými abstraktními příkazy. Tyto jsou realizovány jako objekty třídy Command. Na jednotlivé příkazy je navázán tzv. listener, který je reprezentován rozhraním CommandListener. Toto rozhraní předepisuje metodu commandAction(Command c, Displayable d), do jejíž těla lze naimplementovat odezvu na vyvolané události.
2.2
Platforma Java ME
13
Události užívané v nízkoúrovňových GUI jsou řešeny pomocí metod třídy Canvas, které je třeba překrýt. Jde o metody keyPressed(int keyCode), keyReleased(int keyCode) a keyRepeated(int keyCode). Tyto metody jsou zavolány pokaždé, když je na mobilním telefonu stisknuto, uvolněno, resp. podrženo nějaké tlačítko. O které tlačítko jde, lze zjistit z parametru keyCode reprezentujícího celočíselný kód klávesy. Síťová komunikace MIDP obsahuje podporu pro HTTP síťovou komunikaci postavenou na frameworku GenericConnection z CLDC, který sám o sobě neobsahuje podporu žádného konkrétního síťového protokolu. Pro práci s HTTP spojením lze využít několik možností. Hlavní třídou pro navázání spojení je Connector, jejíž metody lze využít pro vytvoření různých typů spojení. Pro jednoduché navázání HTTP komunikace ji lze využít například pomocí rozhraní StreamConnection, jak ukazuje následující příklad: void getViaStreamConnection(String url) throws IOException { StreamConnection c = null; InputStream s~= null; try { c = (StreamConnection)Connector.open(url); s~= c.openInputStream(); int ch; while ((ch = s.read()) != -1) { ... } } finally { if (s~!= null) s.close(); if (c != null) c.close(); } } Pokud je ale nutné dopředu znát délku (pokud je k dispozici), lze namísto StreamConnection využít rozhraní ContentConnection. Rozhraní pro práci s připojením je více, každé z nich má své specifické vlastnosti a využití. Persistentní úložiště Standardní MIDlety nemají možnost používat k ukládání dat souborový systém (pokud není využito specifického API od výrobce zařízení), ale pouze jednoduchý systém pro ukládání záznamů – Record Management System (RMS). Pro uložení nějakých dat je nutno nejprve definovat úložiště dat (Record store). Úložiště je identifikováno řetězcovou hodnotou, která musí být v rámci sady MIDletů unikátní. Do úložiště dat je poté možno vkládat záznamy s vlastními
2.2
Platforma Java ME
14
daty. Ty je nutno nejprve převést na pole bytů. K tomu se výborně hodí proudy DataOutputStream a ByteArrayOutputStream. Při vložení záznamu do úložiště je vygenerován jednoznačný celočíselný identifikátor recordId, pomocí kterého je možno později k záznamu přistupovat. Minimální hardwarové požadavky MIDP 1.0 Displej: • 1bitová barevná hloubka • 96 × 54 px • poměr velikosti pixelu přibližně 1:1 Minimálně jedno z následujících zařízení: • klávesnice pro ovládání jednou rukou • klávesnice pro ovládání oběma rukama • dotyková obrazovka Paměť: • 128 kB stálé paměti pro MIDP komponenty • 8 kB stálé paměti pro ukládání uživatelských dat aplikací • 32 kB operační paměti pro běh prostředí a aplikací Podpora sítě: • obousměrná • bezdrátová (Sun Microsystems, Inc. 2000) 2.2.4
MIDP 2.0 (JSR 118)
MIDP 2.0 přináší řadu vylepšení oproti MIDP 1.0. Má velký význam pro programátory MIDletů, protože poskytuje mnohem širší spektrum možností a velkou řadu činností zjednodušuje. Hlavní novinky v MIDP 2.0 • početnější sada prvků pro tvorbu GUI • podporu bezpečného spojení HTTPS (HttpsConnection) • podpora soketových připojení (SocketConnection)
2.2
Platforma Java ME
15
• vylepšené nízkoúrovňové GUI pro hry (GameCanvas) • možnost práce s jednotlivými pixely (Graphics) • přehrávání tónů a .wav souborů (media.Manager) • možnost sdílení záznamů RMS mezi MIDlety • lepší bezpečnost – požadavky MIDletu na oprávnění využívat určité funkce (Oracle Corporation, 2010) Minimální hardwarové požadavky MIDP 2.0 (změny oproti verzi 1.0) Paměť: • 256 kB stálé paměti pro MIDP komponenty • 8 kB stálé paměti pro ukládání uživatelských dat aplikací • 128 kB operační paměti pro běh prostředí a aplikací Zvuk: • schopnost přehrávat tóny (Sun Microsystems, Inc. 2006) 2.2.5
Rozšiřující balíčky knihoven
Přestože MID profil API CLDC značně rozšiřuje, občas vznikne potřeba v aplikacích využít funkce, které nejsou součástí MIDP. Z tohoto důvodu lze běhové prostředí dále rozšiřovat o balíčky, poskytující dodatečné sady API. Tyto balíčky, na rozdíl od profilů, nedefinují kompletní prostředí pro běh aplikace, ale jsou vždy používány v kombinaci s nějakou konfigurací nebo profilem. Rozšiřují tedy běhové prostředí, nicméně nejsou dostatečně univerzální, aby mohly být součástí profilu, nebo aby byly sdíleny s ostatními profily v rámci celé konfigurace. (Giguere, 2002) 2.2.6
MIDlet a jeho životní cyklus
MIDlet je aplikace napsaná v MID profilu. Některými vlastnostmi se podobá apletu. Musí rozšiřovat speciální třídu MIDlet a v telefonu běží z bezpečnostních důvodů v tzv. sandboxu, neboli na svém vlastním pískovišti, které nemůže opustit. To sice značně omezuje možnosti využití MIDletů, nicméně MIDP není určeno pro tvorbu systémových aplikací. Pro tyto účely je nutno využít nativní programovací jazyk, nejčastěji C++. Základní třída aplikace musí rozšiřovat abstraktní třídu MIDlet. Při spouštění aplikace je instance této třídy vytvořena zavoláním veřejného konstruktoru bez parametrů. Stavy, ve kterých se může midlet nacházet, znázorňuje obrázek 2. Běh aplikace a její přechod mezi stavy řídí aplikační manažer.
2.3
Vývojové nástroje pro Java ME
16
Obrázek 2: Stavy MIDletu
Po zavolání konstruktoru se aplikace nachází v pasivním stavu. V tomto stavu by neměla vlastnit či používat žádné sdílené zdroje. Pro přechod z pasivního stavu do aktivního stavu je zavolána metoda startApp(). V této metodě aplikace inicializuje zdroje typu Thread, Connection ap. Při volání metody pauseApp(), kterou se aplikace vrací zpět do pasivního stavu, by měla aplikace tyto zdroje opět uvolnit. Při ukončení aplikace zavolá aplikační manažer metodu destroyApp(boolean unconditional). Pokud je parametr true, bude aplikace ukončena v každém případě, pokud je false, aplikace může vyvoláním výjimky MIDletStateChangeException dát najevo, že ještě ukončena být nechce. (Bittnerová, 2002)
2.3
Vývojové nástroje pro Java ME
Sun Java Wireless Toolkit for CLDC je volně dostupná aplikace z dílny společnosti Sun Microsystems, obsahující sadu nástrojů a technologií, pro vývoj aplikací určených pro mobilní zařízení, v největší míře pak pro mobilní telefony. Lze ji použít buď přímo jako vývojové prostředí, nebo její možností využít v rámci jiného, pokročilejšího, IDE. WTK podporuje mnoho standardních API definovaných JCP programem • Connected Limited Device Configuration (JSR 139 – CLDC 1.1) • Mobile Information Device Profile (JSR 118 – MIDP 2.1) • PDA Optional Packages for the J2ME Platform (JSR 75 – PIM & File) • Java APIs for Bluetooth (JSR 82 - Bluetooth & OBEX) • Mobile Media API (JSR 135 – MMAPI 1.1)
2.3
Vývojové nástroje pro Java ME
17
• J2ME Web Services Specification (JSR 172 – Web Services) • Security and Trust Services API for Java ME (JSR 177 – SATSA) • Location API for Java ME (JSR 179 – Location) • SIP API for Java ME (JSR 180 – SIP) • Mobile 3D Graphics API for J2ME (JSR 184 – M3G) • Wireless Messaging API (JSR 205 – WMA 2.0) • Content Handler API (JSR 211 – CHAPI) • Scalable 2D Vector Graphics API for J2ME (JSR 226 – SVG) • Payment API (JSR 229 – Payment) • Advanced Multimedia Supplements (JSR 234 – AMMS) • Mobile Internationalization API (JSR 238 – MIA) • Java Binding for OpenGL ES API (JSR 239 – OpenGL ES) • Java Technology for the Wireless Industry (JSR 185 – JTWI 1.0) • Mobile Service Architecture (JSR 248 – MSA 1.0) Pro každé z těchto API obsahuje WTK minimálně jeden ukázkový příklad se zdrojovými kódy. Wireless Toolkit také integruje obecné nástroje, usnadňující vývoj a testování aplikací, jako například Network Monitor, Memory Monitor nebo Profiler. Dále jsou také integrovány specifické nástroje pro určitá API. Netbeans IDE je oblíbené open source vývojové prostředí určené primárně pro vývoj aplikací v jazyce Java, ale podporuje celou řadu dalších programovacích jazyků. Je napsán v Javě a lze ho tedy využívat na všech běžně používaných operačních systémech. Jeho možnosti lze rozšiřovat pomocí modulů, takže pokud programátor požaduje například pouze podporu platformy Java SE, nemusí instalovat kompletní verzi, ale pouze jádro Netbeans a moduly pro vývoj v Java SE, případně další moduly, které ke své práci potřebuje. (Oracle Corporation, 2010) Netbeans začal v roce 1996 jako studentský projekt (původně po názvem Xelfi) na Karlově univerzitě v Praze. Později se z projektu stal komerční produkt. V roce 2000 byl odkoupen firmou Sun Microsystems a uvolněn jako open-source. Dnes je vyvíjen z především v pražské pobočce firmy Oracle. (Oracle Corporation, 2010) Netbeans má mimo jiné velmi dobrou podporu pro vývoj aplikací pro platformu Java ME a značně programátorům usnadňuje práci, protože jeho součástí je nástroj pro vizuální návrh nejen grafického rozhraní, ale i aplikační logiky.
3
3
BLUETOOTH
18
Bluetooth
Bluetooth je komunikační technologie sloužící k bezdrátovému propojení dvou a více elektronických zařízení, jakými jsou například mobilní telefony, PDA, osobní počítače nebo náhlavní soupravy. Je definovaná standardem IEEE 802.15.1 a spadá do kategorie osobních počítačových sítí, tzv. PAN (Personal Area Network ). Bluetooth, na rozdíl od technologie pro přenos dat pomocí infračerveného záření, nevyžaduje přímou viditelnost komunikujících zařízení. Poskytuje také vyšší přenosové rychlosti. Jednotlivá zařízení jsou identifikována pomocí své jedinečné adresy BD ADDR (Bluetooth Device Address), podobné jako je MAC adresa u Ethernetu. Technologie pracuje v bezlicenčním rádiovém pásmu 2.4 Ghz. Toto pásmo je velmi využívané, je tedy nutno využít metody kmitočtových skoků FHSS (frequency hopping spread spectrum), která zvyšuje odolnost spojení vůči rušení na stejné frekvenci. Bluetooth existuje v několika verzích. Dělí se podle maximálního výkonu (a s tím souvisejícího dosahu) na třídy a podle verzí standardů (a s nimi související přenosové rychlosti). Uváděný dosah platí pro otevřený prostor, v uzavřených prostorách jsou vzdálenosti kratší. Rozdělení dle maximálního výkonu • Class 1. – max. výkon 100 mW (20 dBm) – dosah 100 metrů • Class 2. – max. výkon 2,5 mW (4 dBm) – dosah 10 metrů • Class 3. – max. výkon 1 mW (0 dBm) – dosah 1 metr Rozdělení dle verzí standardů • Bluetooth 1.2 – 1 Mb/s • Bluetooth 2.0 + EDR – 3 Mb/s • Bluetooth 3.0 + HS – 24 Mb/s • Bluetooth 4.0 – 24 Mb/s Bluetooth podporuje jak dvoubodovou, tak mnohabodovou komunikaci. Pokud je více stanic propojeno do ad hoc sítě, tzv. pikosítě (piconet), jedna rádiová stanice funguje jako řídící (master ) a může simultánně obsloužit až 7 podřízených (slave) zařízení. Všechna zařízení v této pikosíti se synchronizují s taktem řídící stanice a se způsobem přeskakování mezi kmitočty. Specifikace dovoluje simultánně použít až 10 pikosítí na ploše o průměru 10 metrů a tyto pikosítě dále sdružovat do tzv. scatternets, neboli rozprostřených sítí. Princip vytvoření scatternetu znázorňuje obrázek 3. (Čepička, 2009; Dreamtech software team, 2002) Přístup aplikací k bezdrátovým technologiím Bluetooth je realizován pomocí sady ovladačů a rozhraní nazývané Bluetooth stack. Rozlišujeme dva druhy Blueto-
3.1
Bluetooth protokoly a vrstvy
19
Obrázek 3: propojení více piconetů do scatternetu. (Dreamtech software team, 2002)
oth stacků. Všeobecné, které kladou důraz na bohatost funkcí a flexibilitu, obvykle používané v osobních počítačích. A embedded, navržené pro použití v zařízeních s omezenými zdroji a nižšími požadavky, jako jsou periferní zařízení. Implementací Bluetooth stacků je mnoho, mezi nejrozšířenější patří pro operační systém Windows stacky Widcomm, Microsoft Windows stack, Toshiba stack a BlueSoleil. Linux v drtivé většině případů používá stack BlueZ. Mac OS X má zabudovaný svůj vlastní stack. Zabezpečení Bluetooth je řešeno třemi základními principy. Autentizací (ověření totožnosti komunikujících stran), důvěrností (ochrana před odposloucháváním) a autorizací (povolení přístupu ke službám). Autentizace a důvěrnost jsou řešeny samotnou implementací Bluetooth, autorizaci je nutno naimplementovat na aplikační vrstvě.
3.1
Bluetooth protokoly a vrstvy
Bluetooth podporuje velkou řadu protokolů. Základní sada protokolů je definována organizací Bluetooth SIG. Několik z nich bude dále popsáno. Host Control Interface (HCI) je rozhraní omožňující jednotnou metodu přístupu k Bluetooth hardwaru. Je specifikováno pro různá fyzická rozhraní (USB, PCI, RS232, UART atd.). Logical Link Control and Adaptation Protocol (L2CAP) je vrstva poskytující spojové a bezspojové datové služby vyšším vrstvám. Mezi tyto služby patří například multiplexování jejich protokolů, nebo segmentace a spojování paketů. L2CAP je založena na tzv. kanálech. Každý kanál má svůj identifikátor Channel identifier (CIF ).
3.2
Bluetooth profily
20
Bluetooth network encapsulation protocol (BNEP) je vrstva Bluetooth stacku umožňující ostatním síťovým protokolům přenos přes Bluetooth. Výrobci mají více možností implementace TCP/IP přes Bluetooth, BNEP je jednou z nich. Radio Frequency Communication (RFCOMM) je protokol určený k emulaci sériového portu RS-232. Poskytuje kompatibilitu se širokou škálou aplikací, používajících pro svoji komunikaci sériový port. Service Discovery Protocol (SDP) je vrstva zodpovědná za vyhledávání služeb na okolních Bluetooth zařízeních a s tím souvisejícími činnostmi. Object exchange (OBEX) je komunikační protokol umožňující přenos dat mezi dvěma zařízeními. Původně byl vyvinut pro použití společně s technologií IrDA. Pracuje na principu klient/server. Využívá se například při posílání souborů přes Bluetooth mezi dvěma mobilními telefony. (Hopkins & Ranjith, 2003; Ticha, 2004)
3.2
Bluetooth profily
Pro dosažené toho, aby různí výrobci implementovali stejné sady funkcí, tím pádem aby byly zařízení vzájemně kompatibilní, vydala organizace Bluetooth SIG tzv. profily.(Dreamtech software team, 2002) Service Discovery Application Profile (SDAP) spolupracuje s vrstvou SDP a je využíván pro vyhledávání služeb na okolních Bluetooth zařízeních. Serial Port Profile (SPP) využívá protokol RFCOMM a poskytuje podporu pro virtuální sériové porty prostřednictvím technologie Bluetooth. Generic Object Exchange Profile (GOEP) je obecný profil využívaný všemy ostatními profily, které chtějí využít protokolu OBEX. Human Interface Device Profile (HID) poskytuje podporu pro periferní zařízení, jako jsou Bluetooth klávesnice nebo myši. (Hopkins & Ranjith, 2003)
3.3
Podpora technologie Bluetooth v jazyce Java
Jazyk Java obsahuje velmi dobrou podporu technologie Bluetooth. Stejně jako všechno ostatní v Javě, je i použití Bluetooth podrobně zdokumentováno a specifikováno, konkrétně v JSR-82 (Java APIs for Bluetooth). Je zde specifikováno rozhraní pro všechny fáze komunikace technologií Bluetooth. Drtivá většina mobilních telefonů s podporou MIDP verze 2.0 má zabudovánu i podporu tohoto rozhraní. Z obrázku 4 je patrné, že po vytvoření spojení s ním lze již pracovat stejně jako
3.3
Podpora technologie Bluetooth v jazyce Java
21
s kterýmkoliv jiným typem spojení, implementuje totiž rozhraní Connection. Této skutečnosti lze s výhodou využít v případě, že aplikace má umět komunikovat nejen přes Bluetooth, ale také například přes technologii 3G či WiFi. Důležitou výhodou Javy oproti ostatním programovacím jazykům je nezávislost na použitém Bluetooth stacku a standardizované API.
Obrázek 4: Hierarchie tříd a rozhraní pro použití Bluetooth v jazyce Java
Java APIs for Bluetooth sestává ze dvou nezávislých balíků: javax.bluetooth a javax.obex. Nezávislé jsou tyto balíky proto, že OBEX je univerzální protokol a nemusí být použit výhradně v kombinaci s Bluetooth. (Hopkins & Ranjith, 2003) 3.3.1
Knihovna BlueCove
Java SE neobsahuje implementaci JSR-82, a pokud tedy chceme využít technologii Bluetooth i na této platformě, je nutno použít některou z knihoven, které JSR-82 implementují. Jednou z nich je knihovna BlueCove. BlueCove spolupracuje s Bluetooth stacky WIDCOMM, Microsoft Bluetooth stack, BlueSoleil a stackem v Mac OS X. Podpora operačního systému Linux, resp. stacku BlueZ je z licenčních důvodů přesunuta do samostatné knihovny BlueCoveGPL.(BlueCove Team, 2008) BlueCove poskytuje rozhraní pro následující profily • SDAP - Service Discovery Application Profile • RFCOMM - Serial Cable Emulation Protocol • L2CAP - Logical Link Control and Adaptation Protocol • OBEX - Generic Object Exchange Profile (na protokolech RFCOMM a TCP)
4
DOSTUPNÁ ŘEŠENÍ VZDÁLENÉHO OVLÁDÁNÍ POČÍTAČE
4
22
Dostupná řešení vzdáleného ovládání počítače
Možností pro vzdálené ovládání osobního počítače je obrovské množství. Vzdálené ovládání lze rozdělit na dva typy – univerzální ovládání a ovládání konkrétní aplikace. V následujícím textu budou popsány některé z nich.
4.1
Remote framebuffer (RFB)
RFB je jednoduchý protokol pro vzdálený přístup k uživatelskému rozhraní. Protože pracuje na úrovni framebufferu, dá se použít na všechny správce oken. Díky tomu, že je takto univerzální, je využíván systémem VNC. Implementací VNC je více, od různých výrobců a pro všechny možné systémy. Často jim jejich vývojáři kromě standardních funkcí, poskytovaných protokolem RFB, přidají podporu pro další operace, například přenosy souborů.(TigerVNC community, 2010) VNC lze využít i pro ovládání počítače mobilním telefonem. Na ovládaný počítač je nutno nainstalovat serverovou část VNC, na mobilní telefon potom klientskou aplikaci, tzv. VNC prohlížeč (VNC viewer). Velká část VNC programů je placená, existují však i freeware, či dokonce open-source varianty.
4.2
SSH (client)
Secure Shel (SSH) slouží pro přihlašování ke vzdálené stanici a vykonávání příkazů na ní. Má za úkol nahradit nezabezpečené aplikace rlogin a rsh a poskytnout bezpečnou, šifrovanou komunikaci skrze nedůvěryhodnou síť (např. Internet). (OpenBSD, 2010) Využívá se především pro vzdálenou správu Linuxových serverů. Klientská aplikace je dostupná i pro mobilní telefony s podporou MIDP 2.0 (např. MidpSSH).
4.3
Teamviewer
Umožňuje vzdálené ovládání počítače přes síť Internet. Na rozdíl od řady dalších aplikací, TeamViewer nevyžaduje aby ovládaný počítač měl veřejnou IP adresu a funguje i když je ovládaný počítač skryt za firewallem. Pro nekomerční použití je poskytován zdarma. Podporuje všechny běžně používané operační systémy na osobních počítačích. Podpora mobilních telefonů se podpora bohužel omezuje pouze na iPhone a zařízení s operačním systémem Android. (TeamViewer GmbH., 2010)
4.4
Remote Desktop Protocol (RDP)
RDP, neboli protokol vzdálené plochy, poskytuje pokročilé možnosti vzdáleného přístupu. Je určen především pro vzdálený přístup k aplikacím běžícím na serverech. Podporuje pokročilé funkce jako je sdílení schránky, mapování vzdálených disků, tisk na vzdálených tiskárnách, vzdálené přehrávání zvuku atd. Je součástí operačního systému Microsoft Windows.(Microsoft, 2010). Dostupná je i klientská aplikace pro MIDP – TSMobiles od firmy SHAPE Services. Tato je ale bohužel placená.
4.5
4.5
Ovládání konkrétní aplikace
23
Ovládání konkrétní aplikace
Vedle aplikací pro univerzální ovládání počítače existuje také velké množství určených pro ovládání konkrétních programů. Jde většinou o ovládání hudebních a filmových přehrávačů. Toto řešení má svoji velkou výhodou v komfortu používání. Na rozdíl od univerzálních řešení se výborně hodí jako obdoba dálkového ovládání TV, např. při sledování filmů na osobním počítači. Nevýhodou ale je skutečnost, že tyto přehrávače musí být aplikací podporovány.
5
NÁVRH ŘEŠENÍ A IMPLEMENTACE
5
24
Návrh řešení a implementace
Mnou navržená aplikace se jmenuje RemotePC a je zaměřena na všestranné ovládání počítače, takže lze s její pomocí ovládat téměř jakoukoliv aplikaci běžící na cílovém počítači. Funguje tedy podobně, jako například výše popsané VNC. Obraz z ovládaného počítače se zobrazuje na displeji mobilního zařízení, odkud lze pomocí kurzoru myši, případně dalších příkazů, počítač ovládat. Tato skutečnost má ovšem i své stinné stránky. Těmi jsou především nižší rychlost a menší pohodlí při používání. Zobrazení plochy počítače na malém displeji telefonu, psaní textů na numerické klávesnici, ovládání kurzoru pomocí tlačítek – to jsou hlavní příčiny sníženého komfortu dálkového ovládání, oproti práci přímo na daném počítači. Z důvodu velkého rozdílu ve velikostech zobrazovače na počítači a na mobilním telefonu je nutno využívat funkcí pro přibližování obrazu a posunu zorného pole. Datové spojení mezi ovládaným počítačem a mobilním zařízením lze realizovat buď pomocí technologie Bluetooth, nebo přes klasické soketové připojení. První varianta je vhodnější pro domácí použití, kdy je aplikace využívána podobně jako dálkové ovládání televizoru. Druhá varianta je podstatně lépe využitelná, není totiž omezena dosahem Bluetooth. Tím se z aplikace stává mocný nástroj pro vzdálený přístup k počítači, který lze, díky dnes již běžně rozšířené technologii datových přenosů HSDPA (často označováno jako sítě 3. generace, 3G), využívat prakticky kdekoliv. Je však nutno brát ohled na fakt, že tyto datové přenosy jsou zpoplatněné operátorem. V případech, kdy se platí za objem přenesených dat je toto použití nevhodné, provoz by byl velmi nákladný. Další nevýhodou spojení přes 3G jsou vyšší nároky na napájení oproti spojení přes Bluetooth. Levnější alternativu přinášejí mobilní telefony s podporou bezdrátové technologie WiFi. Nevýhodou připojení pomocí technologie WiFi jsou velmi vysoké nároky na napájení, přibližně trojnásobné oproti použití Bluetooth (zjištěno pomocí aplikací Energy Profiler na mobilním telefonu Nokia E51). Aplikace pracuje na principu klient–server. Klientská část, určená pro běh na obílím zařízení, odesílá požadavky na ovládaný počítač, kde je spuštěna serverová část, která tyto požadavky obsluhuje a provádí požadované akce, případně odesílá zpět klientském části požadovaná data. Z bezpečnostních důvodů je připojení chráněno heslem, které se nastavuje na ovládaném počítači. Heslo lze nastavit zvlášť pro bluetooth a zvlášť pro TCP/IP.
5.1
Popis klientské aplikace
Klientská část aplikace je řešena formou MIDletu (aplikace MIDP), který se spouští na mobilním zařízení, použitém pro vzdálené ovládání počítače. Pro správný běh aplikace je na zařízení vyžadována podpora CLDC 1.1 a MIDP 2.0. Pro připojení pomocí technlogie Bluetooth navíc ještě podpora Java APIs for Bluetooth (JSR-82). V případě použití připojení pomocí TCP/IP je vhodné využít minimálně technologie EDGE, nebo ještě lépe rychlých datových přenosů HSDPA. Zastaralá
5.1
Popis klientské aplikace
25
technologie datových přenosů GPRS není pro tento účel příliš vhodná, z důvodu poměrně vysokých nároků aplikace na přenosovou rychlost.
Obrázek 5: a) prázdný seznam zařízení, b) vyhledávání, c) nabídka pro připojení k nalezenému zařízení
Po spuštění aplikace se nejprve zobrazí úvodní obrazovka, tzv. splash screen, s názvem aplikace a ikonou. Po uplynutí 3 sekund nebo stisknutí jakéhokoliv tlačítka, se zobrazí hlavní nabídka RemotePC. Ta obsahuje 3 položky: Bluetooth, TCP/IP a Nastavení. Po vstupu do nastavení se zobrazí další dvě nabídky: Nastavení kláves a Pokročilé nastavení. Po zvolení položky Bluetooth se zobrazí seznam zařízení (zatím prázdný) a tlačítko Vyhledat(obrázek 5A). Při potvrzení tlačítka se aktivuje vyhledávání a uživateli se zobrazí čekající obrazovka (obrázek 5B). Po dokončení vyhledávání se opět zobrazí seznam zařízení, v případě, že byla nalezena nějaká zařízení na kterých je spuštěna serverová část, objeví se jejich název (tzv. friendly name) jako položka seznamu a zároveň se zpřístupní příkaz Připojit (obrázek 5C). Po zvolení tohoto příkazu bude uživatel vyzván k zadání hesla. V případě chyby, například když je zakázané použití Bluetooth, se zobrazí chybové hlášení. V případě volby připojení pomocí TCP/IP je uživatel vyzván k zadání adresy serveru a portu (obrázek 6). Další postup je již shodný s použitím technologie Bluetooth. Po úspěšném zadání se již na displeji zobrazí zmenšená plocha ovládaného počítače. Pomocí kláves # a * lze obraz přibližovat a oddalovat. Pro ovládání myši je zde k dispozici kurzor, kterým lze pohybovat pomocí směrových tlačítek. Pohyb tohoto kurzoru se nepřenáší na ovládaný počítač, jeho souřadnice se přenesou až v případě stisku některého z tlačítek myši. Při pohybu kurzoru za okraj obrazovky dojde k posunu aktuálního zobrazení ve směru pohybu. Pokud je potřeba zadat nějaký text, lze to provést přes příkaz Vložit text, nacházející se v menu aplikace. Toto menu je přístupné po stisknutí klávesy k tomu určené (závisí na modelu zařízení). Kromě možnosti vkládání textu obsahuje menu ještě příkazy pro skok do nastavení a pro odpojení. Při zvolení příkazu pro vložení textu se uživateli zobrazí textové pole, do kterého lze něco napsat, a dva příkazy – Vložit a Zrušit. V případě, že je spo-
5.1
Popis klientské aplikace
26
Obrázek 6: a) formulář pro zadávání informací o TCP připojení, b) čekající obrazovka připojování, c) výzva k zadání hesla
jení z nějakého důvodu přerušeno (ztráta signálu, ukončení serverové aplikace atd.), zobrazí se chybové hlášení a přepne se zpět do hlavní nabídky.
Obrázek 7: a) plocha počítače zobrazená na displeji mobilního zařízení, b) nabídka dostupná po připojení, c) formulář pro odeslání textu
V sekci Nastavení kláves (obrázek 8B, 8C) lze pro každou funkci vybrat na jaké tlačítko má být namapována. To je velmi důležité především proto, že odlišná zařízení mají různá tlačítka, jiné rozložení atd. V pokročilém nastavení (obrázek 8A) lze zvolit zda má být obraz o 90◦ otočen, rychlost pohybu kurzoru myši a prodlevu mezi obnovováním obrazu. Této prodlevy lze využít ke snížení objemu přenášených dat, a také k omezení využívaných prostředků.
5.2
Popis serverové aplikace
27
Obrázek 8: a) nabídka pokročilého nastavení, b) nastavení kláves, c) obrazovka pro zvolení nastavované klávesy
5.2
Popis serverové aplikace
Pro vývoj serverové části této aplikace byl zvolen programovací jazyk Java, konkrétně platforma Java SE. Z toho plyne, že lze aplikaci využívat všech operačních systémech, pro které je dostupné běhové prostředí JRE. To je velká výhoda oproti stávajícím řešením, ty jsou totiž v drtivé většině určeny pro použití na systémech Microsoft Windows, nebo jsou placené. Další nutnou podmínkou pro používání je připojení k síti nebo podpora technologie Bluetooth. Pro implementaci Bluetooth v serverové části je využita knihovna BlueCove, protože Bluetooth API (JSR-82) není standardní součástí Java SE. Z toho plyne, že pro správnou funkci Bluetooth připojení musí být na ovládaném počítači kromě JRE nainstalován i Bluetooth stack podporovaný knihovnou BlueCove. Tato podpora je ale dobrá a zahrnuje drtivou většinu běžně používaných Bluetooth stacků. Po spuštění programu se zobrazí okno aplikace obsahující textová pole pro zadání hesel a tlačítka pro povolení Bluetooth a TCP/IP připojení. Ve spodní části okna se vypisují informace o stavu serveru – IP adresy a porty na kterých aplikace naslouchá, adresa připojeného klienta a informace o úšpěšných i neúspěšných autorizacích atd. Uživatelské rozhraní serverové části je znázorněno na obrázku 9.
5.3
Implementace klientské aplikace
28
Obrázek 9: Uživatelské rozhraní serverové části aplikace
5.3
Implementace klientské aplikace
Jak již bylo zmíněno výše, klientská aplikace je naprogramována pro platformu Java ME, profil MIDP 2.0 a konfiguraci CLDC 1.1. Velmi důležitým prvkem na aplikacích pro mobilní telefony je grafické uživatelské rozhraní. Tvorba složitějšího GUI pro MIDlet by byla klasickou cestou, ručního psaní zdrojového kódu, velmi zdlouhavá, proto jsem využil vývojového prostředí Netbeans IDE, jehož součástí je nástroj Visual Mobile Designer (VMD). Tento nástroj velmi zjednodušuje a urychluje tvorbu GUI a vzájemné propojování komponent (tok aplikace). Je zde k dispozici paleta komponent, které lze myší přetahovat do diagramu toku (flow) a následně těmto komponentám nastavovat různé vlastnosti, případně interakce mezi jednotlivými prvky. Nic není dokonalé, a dokonalý bohužel není ani Netbeans IDE. Při intenzivní práci ve VMD Netbeans velmi často havaruje. Také odezva celého vývojového prostředí je při větším počtem prvků v diagramu velmi špatná. Pozice jednotlivých komponent v diagramu se bohužel nedá uložit a funkci automatického rozložení prvků je lepší vůbec nevyužívat, protože rozložení touto funkcí generované je často velmi nepřehledné. Flow diagram RemotePC je uveden v příloze A. Mimo základních komponent GUI definovaných v MIDP, obsahuje paleta navíc dodatečné komponenty z Netbeans frameworku, zjednodušující řadu činnosti. Z těchto přídavných prvků je v RemotePC nejčastěji využívána komponenta Wait screen, určená pro vykonávání blokujících operací. Takovou operací může být například připojování k síti, což je činnost, kterou je vhodné vykonávat v samostatném vlákně. Během provádění operace je na displeji zobrazena obrazovka, obsahující nějaký obrázek a text. Úkol, který se má na pozadí čekající obrazovky vykonat se čekající obrazovce předává pomocí instance třídy SimpleCancellableTask. Pokud kód vykonávaného úkolu vyvolá výjimky, je úkol považován za neúspěšný, v opa-
5.3
Implementace klientské aplikace
29
čném případě za uspěšme dokončený. Na základě toho se pak buď provede nějaká další akce, nebo například vypíše chybové hlášení. Klientskou aplikaci tvoří celkem 9 tříd a jedno rozhraní. Následující seznam nastiňuje jejich hlavní význam, v dalším textu budou popsány podrobněji. • CoreMIDlet – jádro aplikace; zprostředkovává komunikaci mezi třídami • GUI – obsahuje definice GUI a vzájemné propojení jeho prvků (flow) • MyCanvas – plátno; nízkoúrovňový prvek GUI, vykresluje se do něj obraz • SetKeysCanvas – plátno pro mapování tlačítek • NetRequest – rozhraní definující požadavek určený k odeslání serveru • NetThread – rozšiřuje Thread; obsahuje frontu požadavků a odesílá je • RQmouseClick – implementuje NetRequest; požadavek na stisknutí tlačítka myši • RQtypeChars – požadavek na vložení textového řetězce • BtSearch – implementuje DiscoveryListener; obsahuje metody pro vyhledání BT zařízení a služeb • TextCz – obsahuje veškeré textové řetězce použité v aplikaci Při spuštění MIDletu je zavolána metoda CoreMIDlet.startApp(), v jejímž těle se vytvoří instance třídy GUI, na níž se zavolá metoda showGui(), která přepne pohled na úvodní obrazovku, tedy výchozí bod uživatelského rozhraní. Po uplynutí 3 sekund, nebo stisku klávesy se přepne zobrazení do hlavního menu. Každá taková obrazovka je reprezentována objektem implementucím rozhraní Displayable. Mezi těmito obrazovkami lze přepínat za pomoci metody switchDisplayable(Alert alert, Displayable nextDisplayable). Manuálně jsem ji byl nucen použít pouze jednou, a to v těle metody showGui(). O další návaznosti obrazovek se již starají metody vygenerované nástrojem VMD. Přepnutí obrazovky se zde nastaví jednoduše tažením myši z nějaké komponenty (například typu Command), na jinou komponentu, většinou typu Displayable. Do vygenerovaného kódu, těsně před přepnutí obrazovky, lze následně ještě připsat další příkazy, většinou jde o volání některé z veřejných metod třídy CoreMIDlet. Navázání Bluetooth i TCP spojení k serverové aplikaci je zde řešeny jako dva úkoly typu (SimpleCancellableTask), které jsou předány objektům čekajících obrazovek btConnectWait a tcpConnectWait. Metody pro vytvoření těchto úkolů jsou umístěny ve třídě CoreMIDlet. Po vyplnění potřebných údajů v GUI, případně nalezení Bluetooth zařízení, je spuštěna čekající obrazovka, která provede kód úkolu, ve kterém se naváže spojení. Jak Bluetooth, tak i TCP připojení, implementují rozhraní StreamConnection, takže po jejich navázání s nimi lze pracovat stejně a další metody pro síťovou komunikaci jsou již pro oba typy spojení společné. V případě,
5.3
Implementace klientské aplikace
30
že se nepodaří navázat spojení, tak je vyvolána vyjímka. Ta je následně odchycena čekající obrazovkou a vypíše se chybové hlášení. V případě že je spojení navázáno úspěšně, přepne se zobrazení na formulář pro zadání hesla, které se poté odešle na server. Předávání požadavků mezi klientskou a serverovou aplikací je řešeno tak, že klientská aplikace nejprve odešle kód požadavku (tyto kódy jsou definovány jako celočíselné konstanty na obou částech aplikace), server tento kód přijme a na základě typu tohoto požadavku buď odešle požadovanou odpověď, nebo se připraví na příjem a odesílání doplňujících dat. Posloupnost a datové typy přijímaných a odesílaných dat jsou určena právě typem požadavku. Při potvrzení formuláře s heslem se tedy na server odešle kód požadavku na autentizace, server na základě tohoto kódu zavolá metodu readUTF(), která mu umožňí od klientské aplikace přijmout heslo. Klientská aplikace odešle serveru heslo a čeká na odpověď. Server porovná přijatý řetězec s platným heslem a pak odešle buď hodnotu TRUE, nebo FALSE, podle toho zda byla autentizace úspěšná. Při úspěšné autentizaci je na serveru nastaven atribut authorized na hodnotu TRUE. Pokud má tento atribut hodnotu FALSE, server obsluhuje výhradně požadavky na autentizaci. V případě, že obdrží požadavek jiného typu, ukončí spojení. Tím je zabráněno neoprávněnému připojení k serveru pomocí případné upravené klientské aplikace, která by neodesílala požadavky na přihlášení. Po úspěšné autorizaci se nejprve zavolá metoda startNetThread() třídy CoreMIDlet a následně se přepne zobrazení na plátno MyCanvas, na kterém bude vykreslována plocha ovládaného počítače. Metoda startNetThread(), jak již její název napovídá, vytvoří instanci třídy NetThread, kterou následně spustí metodou start(). Tato třída obsahuje frontu (realizováno kontejnerem Vector), do které jsou vkládány objekty představující jednotlivé příkazy (kliknutí myši, vložení textu. . .). Když uživatel například stiskne tlačítko pro kliknutí myší, zavolá se metoda LmbClick(int mobCursorX, int mobCursorY) třídy CoreMIDlet, v jejímž těle se vytvoří nová instance třídy RQmouseClick, předají se jí potřebné parametry (souřadnice kurzoru a číslo stisknutého tlačítka) a následně je vložena do fronty příkazů ve třídě NetThread. Rozhraní NetRequest, které musí být těmito požadavky implementováno, předepisuje metodu send(DataInputStream dis, DataOutputStream dos), v jejímž těle jsou obsaženy příkazy pro odesílání a příjem dat potřebných k vykonání požadavku. Třída NetThread je rozšířením třídy Thread a má překrytou metodu run(). Tělo této metody je vykonáno v novém vlákně a to po zavolání metody start() – o to se již postarala metoda startNetThread() po úspěšném přihlášení. V těle metody run() je smyčka, která v každém svém cyklu ověří, zda se ve frontě nachází nějaký požadavek, v případě že ano, spustí jeho metodu send(). Tím je požadavek vyřízen a může být z fronty odebrán. V případě, že je fronta prázdná, zavolá se metoda recieveScreenshot() třídy CoreMIDlet, která odešle na server požadavek na přijetí screenshotu obrazovky. Součástí tohoto požadavku je pozice a velikost poža-
5.3
Implementace klientské aplikace
31
dovaného výřezu a rozměry, na které má být screenshot zmenšen. Ty jsou shodné s velikostí displeje mobilního telefonu. Následně je ze serveru přijata velikost screenshotu (v bytech). Na základě této informace je pak požadovaný objem dat přijat metodou readFully(buffer, 0, imgSize) do pole bytů, ze kterého je následně metodou Image.createImage(buffer, 0, imgSize) vytvořen objekt typu Image. Do těla smyčky je zařazen ještě příkaz wait(midlet.getDelay()), kterým lze nastavit prodlevu, s jakou budou požadavky vyřizovány. Bez této prodlevy by aplikace pracovala nejrychleji jak to jen lze, to ale není vždy nutné. Vložením prodlevy lze ušetřit datový tok a také systémové zdroje serveru. Vytváření a následné zmenšování screenshotů totiž poměrně dost vytěžuje procesor. Délku této prodlevy lze nastavit v pokročilém nastavení. Třída MyCanvas dědí ze svého předka Canvas metodu paint(graphics g), v jejímž těle lze na plátno „kreslitÿ. Pomocí metody g.drawImage(screenshot, 0, 0, Graphics.TOP | Graphics.LEFT) je zde vykreslen screenshot. V případě, že je zvoleno otočení obrazovky, je nutno využít metodu g.drawRegion(...), která umožňuje pomocí svých parametrů vykreslovaný obraz otočit. Kromě obrazu screenshotu je vykreslován také kurzor myši. Ten musí být vykreslen ještě před screenshotem, jinak by byl překreslen a nebyl by vidět. Metoda paint() se nevolá přímo, ale je zavolána v případě požadavku na překreslení. To se provádí zavoláním metody repaint()). Tato metoda je neblokující, takže překreslení se nemusí provést okamžitě. Třída MyCanvas dále obsahuje zděděné metody showNotify() a hideNotify(), které jsou zavolány pokaždé, když je dané plátno zobrazeno, resp. skryto. V těle těchto metod je vytvářen a spouštěn, resp zastavován a rušen objekt typu Timer. Jde o časovač, pomocí kterého lze v odděleném vlákně vykonávat periodicky nějakou činnost. Zde je využit pro periodické volání metod checkMouseMove() a repaint(), která se stará o překreslování obrazu. Metoda checkMouseMove() bude popsána později. V případě, že je stisknuto nějaké tlačítko, je vyvolána metoda keyPressed(int keycode), ve které jsou je implementována obsluha jednotlivých tlačítek. Parametr keyCode udává kód tlačítka, které bylo stisknuto. Kódy stisknutých tlačítek se porovnávají s kódy tlačítek přiřazených jednotlivým akcím. Tyto přiřazení jsou uloženy v objektu typu Hashtable. V případě, že je kód přiřazen nějaké akci, tato akce se provede. Může jít o posun kurzoru myši, přiblížení obrazu nebo třeba o požadavek na kliknutí myší. Pokud jde o požadavek na přiblížení, oddálení, nebo kliknutí myší, zavolá se příslušná metoda trídy CoreMIDlet, která požadavek buď obslouží sama (například přiblížení obrazu), nebo jej přidá do fronty příkazů pro odeslání serveru. V případě stisku některého z tlačítek pro pohyb kurzoru je nastavena hodnota příslušné stavové proměnné na TRUE. Pro každý směr pohybu kurzoru je vyhrazena jedna proměnná. Pokud je stisknuté tlačítko uvolněno, je vyvolána metoda keyReleased(int keycode). V této metodě jsou obslouženy pouze klávesy pro pohyb kurzoru myší. Pokud je tlačítko pohybu myši uvolněno, proměnná pohybu v příslušném směru je nastavena na hodnotu FALSE.
5.3
Implementace klientské aplikace
32
Metoda checkMouseMove(), která je volána periodicky pomocí časovače, v každém svém cyklu zkontroluje proměnné udávající zda je stisknuto tlačítko pro pohyb kurzoru. V případě že ano, upraví souřadnice kurzoru. Pokud jsou tyto nové souřadnice mimo viditelnou oblast na displeji, zavolá se příslušná metoda pro změnu souřadnic výřezu screenshotu. Pro spojení pomocí technologie Bluetooth je nutno nejprve zjistit konkrétní adresu, pomocí které lze třídou Connector vytvořit spojení. Zde to není tak jednoduché jako v případě TCP/IP spojení, nejprve je potřeba vyhledat okolní Bluetooth zařízení. Dále zjistit jaké služby tato nalezená zařízení poskytují. Až v případě, že se identifikátor nalezené služby shoduje s identifikátorem služby používané serverovou aplikací RemotePC, lze získat požadovaný řetězec pro připojení. K vyhledávání zařízení a služeb se využívá objekt třídy DiscoveryAgent. Ten poskytuje metodu startInquiry(), která zahájí vyhledávání okolních zařízení. Tato metoda může, ale nemusí být blokující. Chování je závislé na konkrétní implementaci JSR-82. Pro získání nalezených zařízení je určeno rozhraní DiscoveryListener. Jeho implementace se předá metodě startInquiry() jako parametr. Při nalezení nějakého zařízení je zavolána metoda deviceDiscovered(RemoteDevice btDevice, DeviceClass cod). Po ukončení hledání zařízení je vyvolána metoda inquiryCompleted(int discType). Do těla těchto metod jsem implementoval ukládání jednotlivých zařízení do Vectoru a probouzení vlákna čekajícího na příkazu wait(). Po nalezení nějakých zařízení je spuštěno vyhledávání služeb na těchto zařízeních. To se provádí podobně jako hledání zařízení. Metodě searchServices(int[] attrSet, UUID[] uuidSet, RemoteDevice btDev, DiscoveryListener discListener) třídy DiscoveryAgent jsou předány parametry hledané služby a v případě že je nalezena, zavolá se metoda servicesDiscovered(int transID, ServiceRecord[] servRecord). V RemotePC je pro vyhledávání zařízení určena třída BtSearch. Implementuje rozhraní DiscoveryListener a vytvořil jsem v ní metodu searchForServices(), která je spouštěna v rámci čekající obrazovky pro hledání zařízení.
5.4
5.4
Implementace serverové aplikace
33
Implementace serverové aplikace
Je naprogramována pro platformu Java SE, jako vývojové prostředí byl použit také Netbeans IDE. Zkládá se z následujících tříd: • GUI – hlavní třída, definice uživatelského rozhraní, obsahuje metodu Main() • BetterRobot – rozšíření třídy Robot o funkci pro vkládání řetězců • NetRequests – obsahuje metody pro zpracování jednotlivých požadavků • TcpIPTread – rozšíření Thread; obsahuje smyčku pro naslouchání připojení • BtThread – obdoba třídy TcpIPThread, ale pro technologii Bluetooth Po stisknutí tlačítka Povolit TCP/IP se vytvoří instance třídy TcpIPThread. Na té se následně zavolá metoda start(), čímž se spustí běh smyčky vyčkávající na připojení klienta. Po připojení jsou jednotlivé požadavky přijímány a předávány metodě doRequest(int code) třídy NetRequests. Podobně se chová i třída BtThread, pouze je přizpůsobena pro spojení technologií Bluetooth. Samotné vykonávání požadavků na ovládání umožňuje třída BetterRobot, která je rozšířením Robot. Tato třída obsahuje metody pro vytváření screenshotů, pohyb kurzorem myši, stisk kláves a podobně. Robot neumožňuje přímo vkládat řetězce, pouze emulovat stisky jednotlivých kláves. Metoda pro vkládání celých řetězců je proto doprogramována ve třídě BetterRobot. Bohužel nepodporuje všechny znaky, pouze omezenou sadu. Neporadí si s češtinou, ani se speciálními znaky. Problém je v tom, že emuluje stisky kláves, ale konkrétní význam těchto kláves je určen také použitým rozložením klávesnice, stavy kláves numlock a capslock atd.
6
ZÁVĚR PRÁCE
6 6.1
34
Závěr práce Možnosti rozšíření
RemotePC je typ aplikace, který by šel ještě velmi dobře rozšiřovat o další funkce. V dnešní době disponuje již velká část mobilních telefonů dotykovou obrazovkou. Na těchto zařízeních lze sice RemotePC používat také, avšak nelze využít potenciálu dotykových obrazovek. V případě ovládání kurzoru pomocí dotykového displeje by se výrazně zlepšil komfort a rychlost ovládání. Ovládání kurzoru pomocí směrových kláves by bylo možné zpříjemnit akcelerací myši. To znamená, že při krátkém stisknutí klávesy pro pohyb kurzoru by se šipka pohybovala pomalu, s narůstající dobou stisku by se rychlost zvyšovala. Tím by bylo možné dosáhnout lepší přenosti a také rychlosti ovládání. Dalším možné rozšíření by se mohlo týkat bezpečnosti. Ta je v současné verzi aplikace řešena pouze velmi okrajově. Celá komunikace probíhá nešifrovaně, včetně odesílání hesla, proto se aplikace vůbec nehodí používat v kombinaci s nezabezpečeným WiFi připojením, jelikož jak hesla, tak i veškerou ostatní komunikaci lze odposlouchávat. V současné verzi aplikace není možné na dálku například stisknout klávesu enter, či jinou funkční klávesu. Toto lze částečně obejít využitím softwarové klávesnice na ovládaném počítači, nicméně je to nepohodlné řešení. Lepší by byla podpora přímo v RemotePC. Aplikaci by bylo možno také vylepšit o podporu ovládání často využívaných konkrétních aplikací. Například pro ovládání hudebních či filmových přehrávačů, prezentací, internetových prohlížečů atd. Výrazně vylepšit by se dala celá serverová část aplikace. Důraz jsem kladl na klientskou část, serverová část obsahuje pouze naprosto základní a nezbytné funkce. Uživatelské rozhraní serverové části by se dalo vylepšit například přidáním možnosti skrýt aplikaci do system traye. Bez užitku by nebyla ani funkce pro přenos souborů mezi mobilním zařízením a ovládaným počítačem. Pro její implementaci by ale bylo nutné využít API přímo od výrobců jednotlivých typů mobilních zařízení, takže by to výrazně omezilo univerzálnost aplikace. Musela by existovat ve více verzích, pro různá zařízení.
6.2
6.2
Závěr
35
Závěr
Cílem práce bylo navrhnout a realizovat aplikaci pro vzdálené ovládání počítače s využitím mobilního zařízení. Toto bylo splněno, podařilo se navrhnout a implementovat fungující aplikaci umožňující všestranné ovládání. Aplikace pracuje na principu klient–server. Skládá se tedy z klientské části běžící na mobilním telefonu, pomocí které uživatel ovládá cílový počítač a serverové části, která mobilní části zprostředkovává přístup k ovládání počítače. Celý projekt, určený pro Netbeans IDE, je umístěn na přiloženém CD. Klientská část je naprogramována v Java ME, konkrétně pro profil MIDP 2.0. Serverová část pak v Java SE. Uživatelské prostředí klientské aplikace bylo navrženo pro efektivní využití omezených prostředků nabízených mobilními telefony. Klientská aplikace byla úspěšně otestována na mobilních telefonech Nokia E51 a Nokia N70. Tím bylo zjištěno že se aplikace chová korektně i na starších zařízeních a s různým rozlišením displeje. Jediným problémem byla ikona aplikace, která se na starší Nokii N70 nezobrazovala správně. Je to dáno tím, že rozměry ikon pro MIDlety nejsou standardizovány. Důraz byl kladen na klientskou část, serverová část je proto řešena jen velmi jednoduše, nicméně svoji funkci plní dobře. Serverová část byla úšpěšně otestována na systémech Ubuntu, Windows 7 a Windows XP SP3. Lze ji tedy považovat za multiplatformní. Pro připojení mobilního telefonu k počítači lze v aplikaci využít jak technologie Bluetooth, tak klasického soketového spojení TCP/IP. V teoretické části byl popsán jazyk Java, blíže pak platforma pro vývoj aplikací (nejen) pro mobilní telefony – Java ME. Zevrubně pak byla představena technologie Bluetooth a její použití v jazyce Java. O této technologii by se dala napsat celá práce, proto nebyl prostor ji zde popisovat příliš podrobně. Dále byly popsány současně dostupné způsoby ovládání.
7
7
REFERENCE
36
Reference
BITTNEROVÁ, L. Interval [online]. 2002 [cit. 2010-11-23]. J2ME v kostce - první midlet. Dostupné z WWW:
. BLUECOVE TEAM BlueCove [online]. c2008 [cit. 2010-12-14]. Dostupné z WWW:
. ČEPIČKA, D. PCWorld [online]. 2009 [cit. 2010-12-12]. Základy technologie Bluetooth: původ a rozsah funkcí. Dostupné z WWW . DREAMTECH SOFTWARE TEAM WAP, Bluetooth, and 3G Programming : Cracking the Code. New York : Hungry Minds, Inc. , c2002. 552 s. GIGUERE, E. [online]. 2002 [cit. 2010-11-23]. J2ME Optional Packages. Dostupné z WWW . HOPKINS, RANJITH Bluetooth for Java. [s.l.] : Apress, 2003. 352 s. ISBN 1590590783. DE JODE, M. Programming Java 2 Micro Edition for Symbian OS. West Sussex : John Wiley & Sons Ltd , 2004. 498 s. ISBN 0470092238. KEOGH, J. Java bez předchozích znalostí : Průvodce pro samouky. Ivo Fořt. Brno : CP Books, a.s., 2005. 274 s. ISBN 80-251-0839-2. MICROSOFT MSDN [online]. c2010 [cit. 2010-12-15s]. Remote Desktop Protocol. Dostupné z WWW: . PECINOVSKÝ, R. Myslíme objektově v jazyku Java. 2. vyd.. Praha : GRADA Publishing, a.s. , 2008. 576 s. ISBN 978-80-247-2653-3. OPENBSD OpenBSD [online]. 2010 [cit. 2010-12-15]. OpenBSD Reference Manual – SSH. Dostupné z WWW: . ORACLE CORPORATION [online]. 2005 [cit. 2010-11-15]. CDC: Java platform technology for connected devices. Dostupné z WWW . ORACLE CORPORATION [online]. c2010 [cit. 2010-11-15]. Java ME Technology - CDC. Dostupné z WWW .
7
REFERENCE
37
ORACLE CORPORATION [online]. c2010 [cit. 2010-11-23]. Java SE at a Glance. Dostupné z WWW . MYHOWTO.ORG J2ME/MIDP Programming For Mobile Phones Good, Bad and Ugly.online]. 2007 [cit. 2011-0101]. Dostupné z WWW: . ORACLE CORPORATION Netbeans [online]. c2010 [cit. 2010-12-12]. Netbeans. Dostupné z WWW: . ORACLE CORPORATION [online]. c2010 [cit. 2010-11-18]. What is New in MIDP 2.0. Dostupné z WWW . PITNER, T. Java - začínáme programovat. Praha : GRADA Publishing, a.s. , 2002. ISBN 80-247-0295-9. . SAN JUAN, A.[online]. Introduction to Java ME (J2ME). 2006 [cit. 2010-1113]. The Lurker. Dostupné z WWW: . SUN MICROSYSTEMS, INC. [online]. 2003 [cit. 2010-11-15]. Connected Limited Device Configuration Specification. Dostupné z WWW . SUN MICROSYSTEMS, INC. [online]. 2000 [cit. 2010-11-16]. J2ME Building Blocks for Mobile Devices. Dostupné z WWW: . SUN MICROSYSTEMS, INC. [online]. 2000 [cit. 2010-11-16]. Mobile Information Device Profile (JSR-37) Specification. Dostupné z WWW: . SUN MICROSYSTEMS, INC. [online]. c2006 [cit. 2010-11-16]. Mobile Information Device Profile Specification version 2.1. Dostupné z WWW: . TEAMVIEWER GMBH TeamViewer [online]. c2010 [cit. 2010-12-15]. Dostupné z WWW: . TIGERVNC COMMUNITY TigerVNC [online]. c2010 [cit. 2010-12-15]. The RFB Protocol. Dostupné z WWW: . TICHA, P. Hiearchie vrstev. [online]. 2004 [cit. 2010-12-14]. Hiearchie vrstev. Dostupné z WWW: .
Přílohy
A
A
FLOW DIAGRAM KLIENTSKÉ ČÁSTI APLIKACE
Flow diagram klientské části aplikace
39