Adaptation multi-réseaux pour applications Mobiles

Transcription

Adaptation multi-réseaux pour applications Mobiles
Institut National Des
Télécommunications d’Evry
Option ASR
Année scolaire : 2004/2005
Rapport du projet de fin d’études :
Adaptation multi-réseaux pour applications Mobiles
Réalisé par : Anis Damak
Yosra Haddar
Encadré par : M. Guy Bernard
M. Slim Benatallah
Contact: [email protected]
[email protected]
1
Sommaire
1- Introduction…………………………………………………..…………page 3
2- Etude technique de l’environnement de travail ……………………..….page 3
2.1- API et outils utilisés ………………………………..………….page 3
2.2- Communication via Wifi ………………………………………page 4
2.3- Communication via Bluetooth ………………………..………..page 5
3- Conception………………………………………………………………page 5
3.1- Contrôle de l’application.………………………...…………….page 6
3.2- Adaptation multi-réseaux.………………………...…………....page 7
4- Réalisation………………………………………………………………page 8
4.1- Environnement du développement……………………………page 8
4.1.1- Java 2, Micro Edition (J2ME) Wireless Toolkit 2.2…………..page 8
4.1.2- Installation de la JVM sur le PDA ……………………………page 12
4.1.3- Installation des cartes Wifi et Bluetooth sur le PC…………...page 12
4.2- Développement………………………………………….......page 12
Guide d’utilisation……………………………………….….page 13
5- Conclusion …………………………………………………………….page 14
Annexes…………………………………………………………………..page 15
Diagramme de cas d’utilisation
Diagramme de classes
Diagrammes de séquence
Bibliographie……………………………………………………………...page 20
2
1- Introduction :
Notre projet fait partie d’un sujet de recherche au sein du département informatique
INF de l’INT. Il s’inscrit dans le cadre de l’amélioration de la qualité des applications
déployées sur les équipements mobiles en particulier les PDA.
Il s’agit en effet de développer un service multi-réseaux mettant en œuvre l’adaptation
dynamique des applications dans les environnements mobiles. Cette adaptation est fonction de
plusieurs paramètres dont le besoin de l’utilisateur qui peut être motivé par des raisons
financières (préférer par exemple une connexion wifi gratuite à une connexion GPRS
coûteuse…). La nature de l’application utilisée peut aussi intervenir dans le choix du réseau
de communication qui est fortement dépendant du type et du contenu des médias acheminés
(format de l’image, texte, format de la vidéo…). Un dernier facteur d’adaptation multiréseaux des communications est le hardware utilisé. En effet les ressources de traitement et
de communication (exemples : énergie, charge cpu, occupation mémoire, le débit réseau, la
connectivité…) sont d’une importance capitale pour le choix du réseau approprié.
Diverses stratégies d'adaptation peuvent ainsi être définies. Ces stratégies permettent
d'associer des règles de configuration aux valeurs pouvant être prises par les paramètres
introduits plus haut.
Dans ce travail, nous illustrons ces possibilités d'adaptation multi-reseaux par la définition
d'un sous ensemble de règles de configuration tenant compte de l'état de connexion d'une
interface réseau et du type du media acheminé.
L’exemple concret sur lequel nous avons travaillé est une application de chat entre deux
terminaux mobiles équipés de bluetooth et wifi. Les données échangées sont soit des
messages textuels soit des images. que nous avons développée recommande l'utilisation de
l'interface "active" pour les deux médias en cas de panne sur la deuxième interface …en
donnant la priorité au wifi.
Nous développons dans ce qui suit les étapes de la réalisation de la solution que nous
proposons, l’environnement technologique de notre travail ainsi que les résultats que nous
avons obtenus.
2- Etude technique de l’environnement de travail :
Nous avons commencé par la réalisation de l’application de chat via wifi et bluetooth
sans prendre en compte l’adaptation multi réseaux dans un premier temps.
Il était donc indispensable de fixer les outils qu’on va utiliser et de comprendre les principes
de fonctionnement de wifi et bluetooth.
2.1 API et outils utilisés :
Javax.microedition.midlet (Mobile Information Device Profil) :
3
Ce package définit les interactions d’une application avec l’environnement dans lequel
elle tourne. Il contient en particulier une classe MIDlet qui définit le cycle de vie d’une midlet
en implémentant les méthodes:
• Public void startApp()
• Public void pauseApp()
• Public void destroyApp()
Javax.microedition.lcdui (user interfaces):
Ce package se charge de l’interaction avec l’utilisateur en définissant des composants
graphiques et en gérant les évènements.
Javax.microedition.io :
Ce package gère les connexions et des flux I/O.
Javax.bluetooth (JSR-82) :
Il gère les canaux de communications via BT.
2.2- Communication via Wifi :
La communication se fait le moyen d’une socket que le serveur commence par ouvrir.
Cette socket peut gérer l’échange de données dans les deux sens entre client et serveur.
Voici un exemple basique de communication via Wifi utilisant TCP :
Partie Serveur :
----------------------------------------------------------------------------------------------------------------try {
scn = (ServerSocketConnection) Connector.open("socket://:5000");
// Wait for a connection.
sc = (SocketConnection) scn.acceptAndOpen();
is = sc.openInputStream();
os = sc.openOutputStream();
String message = “Hello”;
os.write(message.getBytes());
}
------------------------------------------------------------------------------------------------Æ Le seveur ouvre la socket avec un numéro de port en utilisant la méthode open de la classe
Connector se trouvant sous javax.microedition.io. L’appel de la méthode acceptAndOpen()
est une attente bloquante à la connexion d’un client.
Enfin l’envoie d’un message se réduit à l’écriture sur l’objet OutputStream
(java.io.OutputStream).
Partie Client :
----------------------------------------------------------------------------------------------------------------sc = (SocketConnection) Connector.open("socket://192.168.1.1:5000");
si.setText("Connected to server");
4
is = sc.openInputStream();
os = sc.openOutputStream();
while (true) {
StringBuffer sb = new StringBuffer();
int c = 0;
while (((c = is.read()) != '\n') && (c != -1)) {
sb.append((char) c);
}
if (c = = -1) {
break;
}
// Display message to user
si.setText("Message received - " + sb.toString());
}
ÆLe serveur se connecte sur la socket du serveur en fournissant l’adresse de ce dernier ainsi
que le numéro de port approprié. Il récupère un InputStream et un OutputStream. La réception
d’un message est une simple lecture sur le InputStream.
2.3- Communication via Bluetooth :
Javax.bluetooth est une API qui permet:
•
•
•
D’enregistrer des services : Register Services(UUID)
De découvrir des services et des devices
D’établir des connexions.
Offrir un service Bluetooth :
Le Service sera enregistré dans la SDDB (Service Discovery Data Base), ServiceRecord
contient des informations sur le service (attributes) sous la forme (ID,Value)
ID:16bits unsigned integer
Value : DataElement
2 attributs sont necessaires:
• ServiceRecordHandle: identifie l’instance courante du SDP (Service discovery
Protocol) server
• Service ClassIDList: liste des UUDI associés au service offert
Un service est identifié par un UUDI : 128 bits ->32 char
Le serveur récupère le LocalDevice et le mets accessible par les autres devices : il utilise
l’URL pour ouvrir une connexion (StreamConnectionNotifier) permettant de publier le
service.
----------------------------------------------------------------------------------------------------------------Exemple :URL (utilisant le protocole btspp par exemple)
localDevice = LocalDevice.getLocalDevice();
url=“btspp://localhost:” + UUDI.toString() + “;name=btChat”
notifier = (StreamConnectionNotifier) Connector.open(url.toString());
ServiceRecord = localDevice.getRecord(notifier);
5
------------------------------------------------------------------------------------------------Utiliser un service Bluetooth :
• Comment retrouver un remote device?
Æ Implémenter DiscoveryListener qui offre les méthodes (il faut redéfinir ces méthodes)
•
•
•
•
public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod)
public void inquiryCompleted(int discType)
public void servicesDiscovered(int transID, ServiceRecord[] servRecord)
public void serviceSearchCompleted(int transID, int respCode)
Æ Faire appel à la méthode « startInquiry(int accessCode, DiscoveryListener listener) »
qui est invoquée par l’agent de discovery. Puis on récupère l’url du service et on ouvre la
connexion qui sera le support de transmission des données désirées.
3- Conception :
Cette application est composée de deux modules interconnectés, le premier contrôle
l’envoie et la réception des messages et le deuxième prend en charge le choix du canal de
communication et l’acheminement des données.
Chaque utilisateur dispose d’une liste de contacts enregistrée dans un fichier contenant tous
les paramètres de connexions pour chaque contact. Pour un correspondant disposant d’une
interface wifi et une autre Bluetooth le fichier indiquera alors son adresse IP et le port de
connexion pour définir les paramètres de connexion wifi et le nom de l’équipement mobile
ainsi que le l’identifiant du service offert pour définir les paramètres de la connexion
bluetooth.
L’application commence par afficher tous les contacts de l’utilisateur que peut en sélectionner
un et entamer avec lui une discussion.
1. contrôle de l’application :
Notre application doit permettre d’envoyer des images et des messages, elle doit gérer
aussi l’état des connexions Wi-Fi et bluetooth et afficher leurs caractéristiques. C’est pour
cela qu’on a jugé utile de deviser ce module en trois parties ou bien trois contrôleurs dont
chacun s’occupe des tâches bien précises.
¾ ChatController et ChatView: permettent de visualiser la discussion, d’inviter
l’utilisateur à saisir ses messages. Ils disposent des méthodes qui permettent d’ajouter
un message reçu ou envoyé dans la zone de conversation.
¾ ImageController et ImageView : deux classes qui permettent d’inviter le client à
choisir une image pour qu’elle soit publiée. Les images qui peuvent être envoyées sont
enregistrées dans le répertoire
:
‘C:\WTK22\appdb\DefaultColorPhone\filesystem\root1\images’, elles fournissent
aussi des méthodes pour la construction d’une image à partir d’un chemin et la sa
reconstruction et son affichage à partir d’un tableau de bytes.
¾ ConnectionController : permet d’afficher les caractéristiques et les disponibilités de
chaque interface de communication.
6
2. Adaptation multi réseaux
Le module d’adaptation multi réseaux est composé de deux classes (Bluetooth et Wireless)
présentant les deux types de connexions qu’on envisage d’utiliser pour l’acheminement de
données. Chacune de ces deux implémente l’interface Connection qui définit les méthodes
communes à ces deux connexions. Chaque classe alors fournit les méthodes suivantes :
¾ scanConnection qui vérifie la disponibilité de la connexion,
¾ send (byte [] data) qui se charge d’envoyer des bytes pour assurer l’acheminement
des messages et des images convertis en tableau de bytes.
¾ receive ( ) qui attend des messages de la part des clients, vérifie s’il s’agit d’une
image ou d’un message par le premier byte du tableau reçu et met le contrôleur au
courant de la réception des nouvelles données pour que ce dernier puisse les afficher
à l’utilisateur.
¾ releaseRessources ( ) qui ferme toutes les connexions et les flux d’entrée et de sortie
déjà ouverts.
¾ setupConnection ( ) : est appelée pour lancer la communication elle ouvre une
connexion avec le contact choisi et appelle la méthode receive pour l’attente des
messages.
Le choix du type de connexion selon des règles bien définies est réalisé dans la classe
Decision. Cette classe se charge de choisir le canal de communication à chaque envoie de
données tout en prenant en compte des règles enregistrées dans un fichier de configuration.
Cette classe fournit les méthodes suivantes :
¾ setupConnection prend en paramètres un Hashtable contenant toutes les connexions
que nous devons ouvrir afin d’attendre des messages en écoutant sur toutes les
interfaces possibles. Cette méthode récupère la liste de toutes les clés qui représentent
le type de connexion (wifi, bt) et les paramètres correspondants à chacune de ces clés.
Pour une connexion wifi, une adresse IP et un port sont exigés. Alors que pour une
connexion bluetooth le nom de l’équipement mobile et l’identifiant UUID du service
sont nécessaires à l’établissement de la connexion. Toutes ces données sont
récupérées, setupConnection ouvre toutes les connexions souhaitées et chargent des
threads de l’attente des messages venant des clients.
¾ Send(byte[]data ) : prend en paramètre le type de données et les données sous forme
d’un tableau de bytes. A partir de ces paramètres on construit un nouveau tableau de
bytes dont le premier élément est un byte égal à 0 s’il s’agit d’un message et à 1 en cas
d’une image. Avant d’acheminer des données vers l’autre bout du canal de
communication, cette méthode appelle la méthode chooseConnection qui selon les
règles de choix décrites dans le fichier de configuration et les disponibilités des
connexions fait le choix entre Wi-Fi et Bluetooth. Le choix est effectué, on envoie les
données en utilisant la méthode send de Bluetooth ou Wireless.
7
4- Réalisation :
4.1- Environnement du développement :
4.1.1- Java 2, Micro Edition (J2ME) Wireless Toolkit 2.2:
Nous avons commencé par télécharger et installer Java 2, Micro Edition (J2ME)
Wireless Toolkit 2.2 à partir du site
http://java.sun.com/products/j2mewtoolkit/download-2_2.html
sur l’ordinateur portable. Vous avez ci-dessous un aperçu général sur les fonctionnalités de
J2ME Wireless Toolkit 2.2. Il s’agit d’un émulateur offrant un environnement d’exécution
d’applications destinées à des terminaux mobiles.
Plusieurs exemples d’applications sont fournis avec J2ME Wireless Toolkit. Nous avons donc
commencé par explorer ces applications afin de découvrir les services qu’elles offrent.
Comme nous travaillons sous Windows, pour lancer l’émulateur il faut cliquer sur :
Start > Programs > J2ME Wireless Toolkit 2.2 > KToolbar.
La fenêtre suivante apparaît:
On clique sur open Project pour avoir la liste des projets déjà fournis :
Enfin il suffit de sélectionner un projet, l’ouvrir et lancer l’application avec ‘run’.
Pour un nouveau projet il faut :
8
¾ Créer le package en cliquant sur :
Project > Package > Create Package à partir du menu KToolbar. Un
descripteur du MIDlet ainsi des fichiers .jar sont placés dans le répertoire bin
du projet.
¾ Installer l’application en cliquant sur Project > Run via OTA.
¾ Lancer enfin l’application en suivant les instructions.
Nous nous sommes en particulier intéressés à deux applications que nous avons jugées utiles
pour notre projet à savoir NetworkDemo et BluetoothDemo.
NetworkDemo :
Il s’agit d’une application de chat via des Scokets en utilisant une connexion TCP. On
lance l’émulateur deux fois pour simuler les deux PDA : un serveur et un client.
9
Il est à noter qu’il faut commencer par lancer le serveur car c’est lui qui va ouvrir la
connexion et se mettra en attente pour recevoir le client. Cette partie du code du serveur
explique plus en détails l’établissement de la connexion.
----------------------------------------------------------------------------------------------------------------si.setText("Waiting for connection");
scn = (ServerSocketConnection) Connector.open("socket://:5000");
// Wait for a connection.
sc = (SocketConnection) scn.acceptAndOpen();
si.setText("Connection accepted");
is = sc.openInputStream();
os = sc.openOutputStream();
----------------------------------------------------------------------------------------------------------------Ainsi, le serveur ouvre la connexion sur le port 5000 et il effectue l’instruction
bloquante :acceptAndOpen jusqu’à ce que un client se connecte.
Puis, le serveur ouvre aussi un InputStream et un OutputStream qui ont le rôle de canaux de
flux entrant et sortant.
De la même façon, le client se connecte à son tour à ce serveur et effectue la même
démarche :
----------------------------------------------------------------------------------------------------------------sc = (SocketConnection) Connector.open("socket://localhost:5000");
si.setText("Connected to server");
is = sc.openInputStream();
os = sc.openOutputStream();
----------------------------------------------------------------------------------------------------------------Une fois la connexion établie, le serveur et le client peuvent échanger des messages textuels :
10
BluetoothDemo :
Il s’agit d’une application qui utilise bluetooth pour envoyer des images d’un serveur à
un client. On commence toujours par lancer le serveur qui enregistre et publie son service
offrant des images. Il ouvre ensuite un StreamConnection avec l’URL qui décrit le protocole,
le serveur et le nom du service. Enfin il prépare un InputStream et un OutputStream qui ont le
rôle de canaux de flux entrant et sortant, comme pour le cas du wifi.
Le serveur affiche la liste des images dont il dispose. On choisie une image et on la
publie. Le client découvre le service publié par le serveur et trouve les images disponibles.
Enfin quand le client choisit de télécharger l’image cette image lui apparaît à l’écran.
11
4.1.2- Installation de la JVM sur le PDA :
Nous avons installé WebSphere Micro Environment MIDP 2.0 pour Windows Mobile
2003 version 5.7.1 dont la taille est 4,7 Mo. Pour ce faire nous avons utilisé l’outil
ActiveSync qui assure la synchronisation entre le PC et le PDA facilitant ainsi l’installation
sur le PDA.
4.1.3- Installation des cartes Wifi et Bluetooth sur le PC :
Nous disposons d’une carte Wifi Compaq et d’une carte bluetooth Toshiba qui nous
ont été fournies avec leurs CD d’installation. L’installation de la carte Wifi a été immédiate,
alors que pour la carte bluetooth, nous étions obligés de chercher sur Internet les drivers
correspondant à cette carte qui est un modèle assez ancien.
4.2- Développement :
A partir de ces deux exemples (NetworkDemo et BluetoothDemo) nous avons
développé une application qui envoie des images d’un serveur à un client via Wifi, ainsi
qu’une application de chat (envoie de messages textuels) sur bluetooth.
Ensuite nous avons crée une application qui unit envoie de texte et d’images via Wifi.
Après avoir réalisé ces tests unitaires, nous nous sommes intéressés à l’application en entier
pour ajouter une fonctionnalité extérieure chargé du control des réseaux disponibles et du
choix du réseau approprié à l’application de chat.
12
Guide d’utilisation
Dans cette partie nous allons vous décrire toutes les étapes de l’utilisation de notre
application.
Dès le début du lancement de l’application vous etes invités à choisir le contact avec qui vous
désirez avoir une discussion.
La sélection d’un contact lancera une connexion avec ce dernier en essayant de se connecter à
son équipement tout d’abord, si’il n’arrive pas à se connecter il ouvre une connexion en tant
que serveur et attend le client désiré. Un TextBox apparaît pour vous afficher la discussion et
un menu peut être utilisé pour envoyer des messages ou des images
Pour vous envoyer un message, l’application vous invite à saisir votre message et se charge
d’envoyer ce dernier vers votre correspondant et pour envoyer une image vous devez
sélectionner une image et la publier.
13
5- Conclusion :
Au cours de ce projet, nous avons développé d’une part une application de
communication via bluetooth et wifi et d’autre part un module d’adaptation muti-réseaux qui
gère le choix du réseau approprié à l’application.
Nous avons ainsi travaillé sous un nouvel environnement de développement : J2ME et
nous avons aussi appris à manipuler des applications utilisant des connexions Wifi et
bluetooth.
Certes la solution que nous proposons résout en partie le problème d’adaptation multi
réseaux, mais il reste des améliorations à faire surtout en cas de déconnexion. En effet, s’il y a
interruption du réseau wifi par exemple au cours de l’envoie d’un fichier, la solution idéale
serait de continuer à envoyer la partie manquante de ce fichier, via bluetooth. Ceci permet de
gagner un temps considérable surtout s’il s’agit d’un gros fichier.
14
Annexes :
Total Size =17 MB
The J2ME Wireless Toolkit is a set of tools for creating Java applications that run on devices compliant
with the Java Technology for the Wireless Industry (JTWI, JSR 185) specification. It consists of build
tools, utilities, and a device emulator.
The J2ME Wireless Toolkit implements impressive capabilities which are exposed through standard APIs.
The APIs are defined through the Java Community Process (JCP):
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
Connected Limited Device Configuration (CLDC) 1.1 (JSR 139)
Mobile Information Device Profile (MIDP) 2.0 (JSR 118)
Java Technology for the Wireless Industry (JTWI) 1.0 (JSR 185)
Wireless Messaging API (WMA) 2.0 (JSR 205)
Mobile Media API (MMAPI) 1.1 (JSR 135)
PDA Optional Packages for the J2ME Platform (JSR 75)
Java APIs for Bluetooth (JSR 82)
J2ME Web Services Specification (JSR 172)
Mobile 3D Graphics API for J2ME (JSR 184)
System Requirements - Software
ƒ
ƒ
Microsoft Windows XP or (unsupported) Linux-x86
JavaTM 2 SDK, Standard Edition (J2SE SDK), version 1.4.2 - if you plan to do actual
development, or JavaTM 2, Standard Edition Runtime Environment (JRE), version 1.4.2 - if you
only plan to run the demonstration applications.
To download the SDK or JRE you want, go to http://java.sun.com/j2se/downloads.html
System Requirements - Hardware
Minimum hardware requirements are:
ƒ
ƒ
ƒ
50 MB hard disk space
128 MB system RAM
800 MHz Pentium III CPU
15
Diagramme de cas d’utilisation
16
Diagramme de classes
17
Diagramme de séquences
18
19
Bibliographie :
•
•
•
J2ME Applications Java pour terminaux mobiles; par Bruno Delb.
http://bluetooth.com
http://www.ibm.com/software/wireless/wme
20

Documents pareils

Présentation de la plate-forme J2ME / Java ME

Présentation de la plate-forme J2ME / Java ME Le langage Java a été développé à son origine pour la programmation d'appareils électroniques de grande consommation (langage Oak par James Gosling in 1991). Cependant au fil des années, Java a évo...

Plus en détail