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

API standards et tierces Android Discussion :

Réceptions Messages Socket


Sujet :

API standards et tierces Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 33
    Par défaut Réceptions Messages Socket
    Salut,

    Je programme actuellement sous Android, et mon application doit communiquer avec un programme en C++.
    Cette communication comprend un échange de données. Je gère bien (enfin je crois ^^) l'envoi d'infos, mais en ce qui concerne la réception, c'est la galère totale.

    Si quelqu'un pouvait m'aider, je lui en serai reconnaissant.

    Voici le code concerné :
    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
    public class IdentificationActivity extends Activity implements OnClickListener {
    	Button buttonValider = null;
    	EditText editNom;
    	EditText editPass;
    	private String nom;
    	private String pass;
    	private String reponseConnection;
    	private boolean connected = false;
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.identification);
     
     
    		editNom = (EditText)findViewById(R.id.editTextNom);
    		editPass = (EditText)findViewById(R.id.editTextPass);
    		buttonValider = (Button)findViewById(R.id.buttonValidIdent);
    		buttonValider.setOnClickListener(this);
     
    	}
    	@Override
    	public void onClick(View v) {	// click sur le bouton valider de l'ihm de creation
    		// TODO Auto-generated method stub
     
    		if(v == buttonValider) {
    			nom = editNom.getText().toString();
    			pass = editPass.getText().toString();
    			Thread cThread = new Thread(new ClientThread());
    			cThread.start();
     
    			if(reponseConnection == "OK") {
    				Intent monIntent = new Intent(this, ConfigurationActivity.class);
    				startActivity(monIntent);
    			}
    		}
     
    	}
     
    	public class ClientThread implements Runnable {
     
    		@Override
    		public void run() {
    			// TODO Auto-generated method stub
    			try {
    				Log.d("IdentificationActivity", "C: Connecting...");
    				Socket socket = new Socket("192.168.58.24", 1234);
    				connected = true;
    				if(connected) {
    					try {
    						Log.d("IdentificationAcitivity", "C: Sending Command");
    						PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
    						BufferedReader rd = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    						out.println("IDENT,"+nom+","+pass);
    						out.flush();
    						Log.d("IdentificationActivity", "C: Sent");
    						reponseConnection = rd.readLine();
    					}
    					catch(Exception e) {
    						Log.e("IdentificationActivity", "S: Error", e);
    					}
    				}
    				socket.close();
    				Log.d("IdentificationAcitivty", "C: Closed");
    			}
    			catch(Exception e) {
    				Log.e("IdentificationActivity", "C: Error", e);
    				connected = false;
    			}
    		}
     
    	}
    }
    P.S. : C'est mon projet de BTS et cette communication est primordiale pour la suite.

  2. #2
    Membre éprouvé
    Avatar de moritan
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2005
    Messages
    687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2005
    Messages : 687
    Par défaut
    Tu as quoi comme soucis ?

  3. #3
    Expert confirmé

    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
    Billets dans le blog
    3
    Par défaut
    pour être propre il faut rajouter les "close" sur les resources...

    Genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Socket s = new Socket();
    boolean connected = f
    try {
        s.connect(...);
        connected = true;
    } catch (...) {
    } finally {
       if (connected)
          s.close();
    }
    Ensuite, je ne suis pas sur qu'il faille passer par un PrintStream...(quel charset/end-of-line sera utilisé ?)... L'output-stream devrait être suffisant (et plus simple à gérer coté serveur)...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    static String CHARSET = "UTF-8";
    static byte[] EOL = { '\n' };
     
    BufferedOutputStream bos = new BufferedOutputStream (s.getOutputStream());
    bos.write(login.getBytes(CHARSET));
    bos.write(EOL);
    bos.write(password.getBytes(CHARSET));
    bos.write(EOL);
    bos.flush();
    Apres pour le reste, comme on ne sait pas le probleme que tu as....

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 33
    Par défaut
    Alors le code que j'ai posté est celui du client qui sera sur une tablette Android. Le serveur est en C++ sur un pc embarqué.
    Le problème que j'ai, c'est que lorsque j'envoie une trame de communication vers le serveur, celui-ci reçois correctement, mais quand il m'envoie la réponse disant qu'il a bien reçu le message, je ne reçois rien de mon côté.

    Sur un site, j'ai trouvé un sujet de tp qui est grosso-modo la chose que je dois faire :
    Envoyer votre identifiant et votre mot de passe au serveur, puis lire la réponse du serveur. Si l'identifiant et le mot de passe sont acceptés, afficher l'interface de configuration.

    EDIT : J'ai modifié mon code suite à quelques petites modifications d'envoi.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2012
    Messages : 33
    Par défaut
    Bon j'ai réussi à régler le problème de la réception. Mais autre chose se présente : lors de la réception de cette réponse, si c'est "OK", je dois afficher une interface.
    Je suis passé en mode debug pour vérifier si je passe bien dans ma boucle. Je passe bien dedans mais l'interface ne s'affiche pas.

    Voici le code en question :
    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
    80
    81
    82
    public class IdentificationActivity extends Activity implements OnClickListener {
    	Button buttonValider = null;
    	EditText editNom;
    	EditText editPass;
    	private String nom;
    	private String pass;
    	private String reponseConnection;
    	private boolean connected = false;
    	private boolean reponseLue = false;
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.identification);
     
     
    		editNom = (EditText)findViewById(R.id.editTextNom);
    		editPass = (EditText)findViewById(R.id.editTextPass);
    		buttonValider = (Button)findViewById(R.id.buttonValidIdent);
    		buttonValider.setOnClickListener(this);
     
    	}
    	@Override
    	synchronized public void onClick(View v) {	// click sur le bouton valider de l'ihm de creation
    		// TODO Auto-generated method stub
     
    		if(v == buttonValider) {
    			nom = editNom.getText().toString();
    			pass = editPass.getText().toString();
    			Thread cThread = new Thread(new ClientThread());
    			cThread.start();
    			while(reponseLue == false) {
    				try {
    					wait();
    				}
    				catch(InterruptedException ie) {
    					ie.printStackTrace();
    				}
    			}
    			if(reponseConnection.equals("OK")) {
    				Intent monIntent = new Intent(this, ConfigurationActivity.class);
    				startActivity(monIntent);
    			}
    		}
     
    	}
     
    	public class ClientThread implements Runnable {
     
    		@Override
    		synchronized public void run() {
    			// TODO Auto-generated method stub
    			try {
    				Log.d("IdentificationActivity", "C: Connecting...");
    				Socket socket = new Socket("192.168.58.22", 1234);
    				connected = true;
    				if(connected) {
    					try {
    						Log.d("IdentificationAcitivity", "C: Sending Command");
    						PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
    						BufferedReader rd = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    						out.println("IDENT,"+nom+","+pass);
    						out.flush();
    						Log.d("IdentificationActivity", "C: Sent");
    						reponseConnection = rd.readLine();
    						reponseLue = true;
    						notify();
    					}
    					catch(Exception e) {
    						Log.e("IdentificationActivity", "S: Error", e);
    					}
    				}
    				socket.close();
    				Log.d("IdentificationAcitivty", "C: Closed");
    			}
    			catch(Exception e) {
    				Log.e("IdentificationActivity", "C: Error", e);
    				connected = false;
    			}
    		}
     
    	}
    }

  6. #6
    Membre éprouvé
    Avatar de moritan
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2005
    Messages
    687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2005
    Messages : 687
    Par défaut
    Il faut lancer ton intent à partir de ton UI-Thread.
    regarde du coté des handler pour notifier ton thread principal

Discussions similaires

  1. Réception messages pop.yahoo.fr et orange.fr
    Par Phil_LejDev dans le forum Thunderbird
    Réponses: 1
    Dernier message: 11/11/2008, 21h18
  2. problème réception messages
    Par nadine64 dans le forum Thunderbird
    Réponses: 1
    Dernier message: 01/08/2008, 08h59
  3. Réponses: 1
    Dernier message: 19/06/2008, 15h25
  4. Problème de réception dans Socket.
    Par rzayani dans le forum C++
    Réponses: 0
    Dernier message: 29/04/2008, 15h49
  5. [07]boite de réception ( message )
    Par crousty dans le forum Outlook
    Réponses: 13
    Dernier message: 17/04/2007, 23h03

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