IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

[android] Impossible de recevoir des données d'un PC vers une application


Sujet :

Android

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 6
    Points : 6
    Points
    6
    Par défaut [android] Impossible de recevoir des données d'un PC vers une application
    Bonjour,

    Je développe une application dans laquelle j'arrive à envoyer des données en UDP au serveur (PC) en cliquant sur un bouton qui fait appelle a une classe qui extends AsyncTask. Cependant, je ne parviens pas à recevoir de données.
    Je voudrais pouvoir écouter en permanence l'arrivée de nouveaux messages donc j'ai fait une classe fille qui extends AsyncTask et que j'appelle dans la méthode oncreate() de mon application en faisant : client = new Client();
    client.execute();


    Voici ma classe fille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     class Client extends AsyncTask<Void,Void,String>{
     
    		 DatagramSocket client;
    		 String test ;
     
     
        	public String doInBackground(Void...params){ 		 
           		String result=null;
        		int port=4000;
     
           		DatagramSocket clientSocket = null;
    	       	byte[] receiveData = new byte[256];
    	       	DatagramPacket packet = new DatagramPacket(receiveData, receiveData.length);
    	       		try{ 
    	       			InetAddress adresse = InetAddress.getByName("10.0.2.2");
    	       			clientSocket = new DatagramSocket(port);
    	       			clientSocket.receive(packet);
    	       			result = new String(packet.getData());
    	       			Thread.sleep(100);
    	       			Log.d("","Received :) ");
     
           		}catch (Exception e) {
           			e.printStackTrace();
     
        		} finally {
    	            if (clientSocket != null) {
    	            	clientSocket.close();	          
    	            }
        		}
        		 return result;
        	}
     
     
        	public void onPostExecute(String result){ 
                 if (result != null) {
                		 TextView tv = (TextView) MainActivity.this.findViewById(R.id.textView1);
    		             tv.setText(result);
                 }
        	}
        }

    Mon serveur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    package serveurudp;
     
    import java.net.*;
    import java.io.*;
     
    public  class serveur {
     
    	public static void main(String args[]) throws Exception       {   
    	       DatagramSocket serverSocket = new DatagramSocket(4000);          
    	       byte[] receiveData = new byte[1024];          
    	       byte[] sendData = new byte[256];           
    	       while(true) {              
    	    	   /*DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);                 
    	    	   serverSocket.receive(receivePacket);              
    	    	   String sentence = new String( receivePacket.getData());                 
    	    	   System.out.println("RECEIVED: " + sentence);            
    	    	     */        
    	    	   int port=4000;
    		       InetAddress adresse = InetAddress.getByName("10.0.2.2");        
    	    	   String capitalizedSentence = "Coucou";   
    	    	   sendData = capitalizedSentence.getBytes();    
    	    	   DatagramPacket sendPacket =  new DatagramPacket(sendData, sendData.length, adresse, port);                   
    	    	   serverSocket.send(sendPacket);                
    	       }      
    	 } 
     
     
    }
    Si vous pourriez m'aider, car je ne vois pas d'où vient le problème. Quand je lance l'application et le serveur, aucune erreur ne s'affiche mais je ne lis pas non plus les données reçues.

    Merci d'avance !!

  2. #2
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Je vois 10.0.2.2 dans les deux codes... c'est normal ?

    Parce que 10.0.2.2 c'est l'adresse de la machine "hote" sur le réseau virtuel entre émulateur et hôte...
    Mais l'émulateur est à l'adresse 10.0.2.15 (http://developer.android.com/tools/d...tworkaddresses)
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Merci de votre réponse, effectivement, ce n'était pas normal. Cependant, même en changeant l'adresse, je ne parviens toujours pas à lire les données. Est ce que la fonction doinbackground est exécutée en boucle ?

    J'ai eu une erreur sur ma console : Can't bind to local 8700 for debugger

  4. #4
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Non... doInBackground est executé une fois et une seule....

    AsyncTask.execute(P):
    * onPreExecute(P) (thread UI)
    --- * R doInBackground(P) (worker thread)
    * onPostExecute(R) (thread UI)
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Comment je pourrais faire pour écouter en boucle si je reçois des données et ce, même si l'application est fermée. Car mon but est de pouvoir envoyer une notification dès que je reçois un message du serveur .. donc je dois écouter en continu mon serveur .

    Je pense que je dois faire un service mais je ne sais pas du tout comment procéder, si quelqu'un pouvait m'aider un peu, ça serait gentil.

    PS : je ne sais toujours pas pourquoi je n'arrive pas à recevoir mes données sur l'appli ..


    J'ai essayé de créer ma classe contenant mon service pour écouter en continu mon serveur mais rien ne se passe, je ne reçois jamais de données. En plus, je ne sais pas comment je peux renvoyer la donnée reçue à mon activité principale. Car dans mon mainacitivity, j'appelle mon service comme cela :
    Intent intent = new Intent(this, UDPlisten.class);
    startService(intent);

    Voici le code de mon service :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
     
    import java.net.*;
    import java.io.*;
     
    import android.app.Service;
    import android.os.IBinder;
    import android.util.Log;
    import android.content.Intent;
     
     
    public class UDPlisten extends Service {
     
    	static String UDP_BROADCAST = "UDPBroadcast";
    	DatagramSocket socket;
     
     
    	private void listenAndWaitAndThrowIntent(InetAddress broadcastIP, Integer port) throws Exception {
    	    byte[] recvBuf = new byte[15000];
    	    if (socket == null || socket.isClosed()){
    	        socket = new DatagramSocket(port, broadcastIP);
    	        socket.setBroadcast(true);
    	    }
    	    DatagramPacket packet = new DatagramPacket(recvBuf, recvBuf.length);
    	    Log.e("UDP", "Waiting for UDP broadcast");
    	    socket.receive(packet);
    	    String message = new String(packet.getData()).trim();
    	    Log.e("UDP", "message: " + message);
    	    socket.close();
    	}
     
    	     Thread UDPBroadcastThread;
     
    	void startListenForUDPBroadcast() {
    	    UDPBroadcastThread = new Thread(new Runnable() {
    	        public void run() {
    	            try {
    	                InetAddress broadcastIP =InetAddress.getByName("192.168.1.101"); //172.16.238.42 //192.168.1.255
    	                Integer port = 4000;
    	                while (shouldRestartSocketListen) {
    	                    listenAndWaitAndThrowIntent(broadcastIP, port);
    	                }
    	                //if (!shouldListenForUDPBroadcast) throw new ThreadDeath();
    	            } catch (Exception e) {
    	                Log.i("UDP", "no longer listening for UDP broadcasts cause of error " + e.getMessage());
    	            }
    	        }
    	    });
    	    UDPBroadcastThread.start();
    	}
    	           private Boolean shouldRestartSocketListen=true;
     
    	void stopListen() {
    	    shouldRestartSocketListen = false;
    	    socket.close();
    	}
     
    	@Override
    	public void onCreate() {
    	};
     
    	@Override
    	public void onDestroy() {
    	    stopListen();
    	}
     
     
    	@Override
    	public int onStartCommand(Intent intent, int flags, int startId) {
    	    shouldRestartSocketListen = true;
    	    startListenForUDPBroadcast();
    	    Log.i("UDP", "Service started");
    	    return START_STICKY;
    	}
     
    	@Override
    	public IBinder onBind(Intent intent) {
    	    return null;
    	}
    }
    J'aimerais si possible avoir une réponse rapidement !
    Merci !!

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/05/2014, 14h49
  2. Réponses: 1
    Dernier message: 09/04/2010, 13h04
  3. Importer des données de 250 feuilles vers une seule
    Par Bryan78 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/04/2008, 16h18
  4. Récuperer des données de fichier pdf vers une feuille xls
    Par zeralium dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 31/08/2007, 14h03
  5. Transferer des données d'un table vers une autre
    Par pooi1 dans le forum VBA Access
    Réponses: 4
    Dernier message: 31/05/2007, 01h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo