1 package com.lasalle.meeting;
3 import android.os.Bundle;
4 import android.os.Handler;
5 import android.os.Message;
6 import android.util.Log;
8 import java.io.IOException;
9 import java.net.DatagramPacket;
10 import java.net.Socket;
11 import java.util.concurrent.locks.ReentrantLock;
28 private final static String
TAG =
"Communication";
30 private final static int PORT = 5000;
33 private final ReentrantLock
mutex =
new ReentrantLock();
61 socket =
new DatagramSocket(PORT);
64 catch (SocketException se)
71 this.adresseIP = InetAddress.getByName(adresseMulticast);
73 catch (UnknownHostException e)
89 socket =
new DatagramSocket(port);
92 catch (SocketException se)
99 this.adresseIP = InetAddress.getByName(adresseMulticast);
101 catch (UnknownHostException e)
125 byte[] reception =
new byte[1024];
127 while (socket != null && !socket.isClosed())
131 final DatagramPacket paquetRecu =
new DatagramPacket(reception, reception.length);
132 socket.receive(paquetRecu);
134 trame =
new String(paquetRecu.getData(), paquetRecu.getOffset(), paquetRecu.getLength());
135 Log.d(TAG,
"Réception de " + paquetRecu.getAddress().getHostAddress() +
":" + paquetRecu.getPort() +
" -> " +
trame);
137 Message msg = Message.obtain();
138 Bundle b =
new Bundle();
139 b.putString(
"adresseIP", paquetRecu.getAddress().getHostAddress());
140 b.putInt(
"port", paquetRecu.getPort());
142 b.putString(
"trame", trame);
145 handler.sendMessage(msg);
150 Log.d(TAG,
"Erreur recevoir() [socket.isClosed = " + socket.isClosed() +
"]");
168 @Override
public void run()
170 byte[] emission =
new byte[1024];
174 emission = requete.getBytes();
175 DatagramPacket paquetRetour =
new DatagramPacket(emission, emission.length, adresseIP, PORT);
176 socket.send(paquetRetour);
177 Log.d(TAG,
"send() = " + requete);
179 catch (IOException e)
181 Log.d(TAG,
"Erreur send() [socket.isClosed = " + socket.isClosed() +
"]");
193 public void envoyer(
final String requete,
final String adresseIP)
198 final InetAddress adresseIPDistante;
201 adresseIPDistante = InetAddress.getByName(adresseIP);
203 catch (UnknownHostException e)
211 @Override
public void run()
213 byte[] emission =
new byte[1024];
217 emission = requete.getBytes();
218 DatagramPacket paquetRetour =
new DatagramPacket(emission, emission.length, adresseIPDistante, PORT);
219 socket.send(paquetRetour);
220 Log.d(TAG,
"send() " + adresseIP +
" = " + requete);
222 catch (IOException e)
224 Log.d(TAG,
"Erreur send() [socket.isClosed = " + socket.isClosed() +
"]");
Déclaration de la classe Communication.
static final int TIMEOUT_RECEPTION_REPONSE
temps maximum d'une réponse d'un portier
InetAddress adresseIP
attribut récuperant l'adresse IP du portier
Communication(Handler handler)
constructeur de communication
static final String DELIMITEUR_FIN
static final int NB_DELIMITEURS_GET_3
void run()
méthode appelée automatiquement quand le socket reçois quelque chose
static final int PORT
port d'ecoute des portiers
void arreter()
méthode arrétant la socket, donc la communication avec les portiers
static final int NB_DELIMITEURS_GET_1
void envoyer(final String requete, final String adresseIP)
méthode envoyant une requête à l'adresse de indiqué en paramètre
Communication(int port, Handler handler)
constructeur de communication
final ReentrantLock mutex
String trame
attribut récuperant la trame
void setHandler(Handler handler)
change le handler par celui mis en paramètre
static final int NB_DELIMITEURS_GET_2
static final int CODE_RECEPTION
code de reception correcte pour le portiers
static final String DELIMITEUR_CHAMP
static final String TAG
TAG utilisé dans les log.
void envoyer(final String requete)
méthode envoyant une requête à l'adresse de multicast
Handler handler
attribut permetant d'envoyer une requête par rapport a une autre activity
static final String DELIMITEUR_EN_TETE
static final String adresseMulticast
adresse de multicast des portiers
void recevoir()
méthode recevant les trames des portiers
DatagramSocket socket
attribut récuperant les informations de la socket