Projet

Général

Profil

Client Android connexion au serveur et envoi des données » Historique » Version 8

Anonyme, 22/03/2015 21:21

1 1 Anonyme
h1. Client Android connexion au serveur et envoi des données
2
3 3 Anonyme
Pour permettre à l'application de pouvoir communiquer avec le serveur, nous avons créé une classe spécifique permettant de gérer la connexion à un serveur. Cette classe est un "singleton", c'est à dire qu'il n'y aura qu'un seul objet Connexion créé grâçe à cette classe. Le singleton était ici necessaire, car la connexion doit être unique.
4 1 Anonyme
5
!variables_app_android.png!
6 5 Anonyme
_(Variables de la classe)_
7 1 Anonyme
8 6 Anonyme
Cette classe déclare un certain nombre de variables, _ipaddr_ s'occupe de conserver l'adresse du serveur , tandis que nous conservons le port de connexion dans _port_. _isConnected_ conserve l'état de connection de l'application à une socket, par défaut, l'application n'est pas connecté. _client_ contient la Socket de connexion du client. Cette Socket est nécessaire afin de définir un port de sortie des données.
9 1 Anonyme
Enfin, _INSTANCE_ conservera l'unique instance de la classe Connexion, cette instance sera créé dès le premier appel de la méthode de classe _getInstance()_.
10 6 Anonyme
11
h2. Envoi de données
12
13
Quand un élément de l'application souhaite envoyer des données, elle doit appeller la méthode sendInfo(final String info). Cette méthode doit être appelé via l'instance de la classe, avec un appel de la forme : Connexion.getInstance().sendInfo(String les_donnees_a_envoyer).
14
15
!methode_envoi_donnees.png!
16
17 7 Anonyme
Avant d'envoyer les données, l'application verifie si la socket _client_ a bien été créé. Si ce n'est pas le cas, elle appelle la methode getConnexion().
18 6 Anonyme
Nous avons choisi d'utiliser le protocole UDP, ce qui permet d'envoyer des données sans qu'une connexion préalable soit nécéssaire.
19
Autre point important, Android exige que toute action sur le réseau soit effectué sur un thread autre que le thread principal de l'application.
20
De ce fait, chaque envoi de données doit se faire dans un nouveau thread.
21
Pour envoyer les données, nous devons créer un datagramme contenant les données (sous la forme d'un tableau d'octets), la taille des données, l'adresse du serveur, ainsi que son port.
22
De cette manière, l'application peut, via cette méthode, envoyer de manière efficace toute sorte de données n'importe quelle adresse définie au préalable.
23 8 Anonyme
24
h2. Utilisation dans l'application
25
26
Dans notre application, cette methode d'envoi est utilisé dans la classe JoystickView, dans sa méthode onTouchEvent().
27
28
!utilisation_envoi.png!
29
30
La méthode onTouchEvent() décrit comment le joystick doit réagir lorsqu'il est appuyé. Ici, nous récuperons uniquement le "radius" et envoyons cela dans la fonction sendCoordinates() qui préparera les données qui vont être envoyés. Le radius permet de connaitre les coordonnées max de x et y, afin de pouvoir calculer un pourcentage d'appui sur le joystick. C'est nécessaire car les coordonnées max ne sont pas fixes, elles varient en fonction de la taille du joystick. Il est donc nécessaire d'effectuer ces calculs, et de ne pas envoyer ces données "brutes".
31
 
32
La méthode sendCoordinates() calcule donc ce pourcentage pour x et y, et prépare les données, qui seront sous la forme "id_du_joystick|X:pourcentage_en_x|Y:pourcentage_en_y".