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 :

Reconnexion automatique Client TCP


Sujet :

Android

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2012
    Messages : 4
    Points : 8
    Points
    8
    Par défaut Reconnexion automatique Client TCP
    Bonjour,

    Le code suivant fonctionne parfaitement dans les deux sens Client<->Serveur
    cependant, je suis obligé de relançer manuellement l'appli client (NetCom) en cas d'errreur de connection ou d'échec d'envoi !
    J'ai essayé différentes solutions au niveau du thead en background, sans résultat ...
    Auriez-vous une piste à me suggérer pour par exemple pouvoir rétablir automatiquement la connection du client avec le serveur, partant du principe que le Nexus One est bien connecté au réseau WiFi.
    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
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
     
    // abiz after Elektor Android book october 2012
    package netcom.example.com;
     
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.InetSocketAddress;
    import java.net.Socket;
    import java.net.SocketAddress;
    import android.app.Activity;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;
     
    public class NetComActivity extends Activity {
    	Button btnSend;
    	TextView textStatus;
    	NetworkTask networktask;
    	private EditText message;
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main);
    		message = (EditText) findViewById(R.id.editMessage);
    		btnSend = (Button)findViewById(R.id.btnSend);
    		textStatus = (TextView)findViewById(R.id.textStatus);
    		btnSend.setOnClickListener(btnSendListener);
    		networktask = new NetworkTask(); 
    		networktask.execute();
    	}
     
    	private OnClickListener btnSendListener = new OnClickListener() {
    		public void onClick(View v){
    			textStatus.setText("Envoi d'un message à la tâche.");
    			// On envoi un message vers le serveur. 
    			networktask.SendDataToNetwork(message.getText() + "\r\n\r\n");
    		}
    	};
     
    	public class NetworkTask extends AsyncTask<Void, byte[], Boolean> {
    		Socket nsocket; //Network Socket
    		InputStream nis; //Network Input Stream
    		OutputStream nos; //Network Output Stream
    		@Override
    		protected void onPreExecute() {
    		}
    		@Override
    		// >>> Partie executee dans un autre Thread >>>>
    	    protected Boolean doInBackground(Void... params) { 
    	        boolean result = false;
    	        try {
    	            SocketAddress sockaddr = new InetSocketAddress("192.168.55.1", 5000);
    	            nsocket = new Socket();
    	            nsocket.connect(sockaddr, 10000); //10 second connection timeout
    	            if (nsocket.isConnected()) { 
    	                nis = nsocket.getInputStream();
    	                nos = nsocket.getOutputStream();
    	                byte[] buffer = new byte[4096];
    	                int read = nis.read(buffer, 0, 4096); 
    	                while(read != -1){
    	                    byte[] tempdata = new byte[read];
    	                    System.arraycopy(buffer, 0, tempdata, 0, read);
    	                    publishProgress(tempdata);
    	                    read = nis.read(buffer, 0, 4096); 
    	                }
    	            }
    	        } catch (IOException e) {
    	            e.printStackTrace();
    	            result = true;
    	        } catch (Exception e) {
    	            e.printStackTrace();
    	            result = true;
    	        } finally {
    	            try {
    	                nis.close();
    	                nos.close();
    	                nsocket.close();
    	            } catch (IOException e) {
    	                e.printStackTrace();
    	            } catch (Exception e) {
    	                e.printStackTrace();
    	            }
    	        }
    	        return result;
    	    } // <<< doInBackground <<<<<<<<<<<<<<<<<<<<<<<<<<<<
     
    		public void SendDataToNetwork(String cmd) {
    		try {
    			if (nsocket.isConnected()) {
    				textStatus.setText("Envoi d'un message au Socket.");
    				nos.write(cmd.getBytes());
    			} else {
    				textStatus.setText("Envoi impossible Socket fermé.");
    			}
    		} catch (Exception e) {
    			textStatus.setText("Echec d'envoi Erreur générale.");
    			}
    		}
     
    		@Override
    		protected void onProgressUpdate(byte[]... values) {
    			if (values.length > 0) {
    			textStatus.setText(new String(values[0]));
    			}
    		}
     
    		@Override
    		protected void onPostExecute(Boolean result) {
    			if (result) {
    			textStatus.setText("Erreur de connexion.");          
    			}
    		}
    	} // <<< NetworkTask <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
     
    	@Override
    	protected void onDestroy() {
    		super.onDestroy();
    		networktask.cancel(true);
    	}
    }
    Par avance merci
    Alain

  2. #2
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Auriez-vous une piste à me suggérer pour par exemple pouvoir rétablir automatiquement la connection du client avec le serveur, partant du principe que le Nexus One est bien connecté au réseau WiFi.
    Bonjour

    A toi de retenter la connexion au bout de x tentatives lorsque celle-ci a échoué.

    Soit en relançant le thread soit en permettant à celui ci de pouvoir boucler sur le nombre de tentatives que tu auras défini.

    Après laisse du temps entre chaque tentative.

    Tu peux passer par un handler pour ce genre d'action ou alors directement via une boucle et une attente.
    http://developer.android.com/referen...unnable, long)

    Même procédé pour l'envoie des données.

    L' Handler est non bloquant par rapport à l'autre solution.
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Client TCP/IP comment gérer une reconnexion automatique ?
    Par GGelec dans le forum Réseau/Web
    Réponses: 3
    Dernier message: 08/04/2013, 22h07
  2. Reconnexion automatique du client SQL Server
    Par marsup077 dans le forum Administration
    Réponses: 2
    Dernier message: 11/04/2011, 13h19
  3. [Socket] Reconnexion automatique du client
    Par sorry60 dans le forum Réseau
    Réponses: 10
    Dernier message: 09/01/2007, 20h24
  4. Client Tcp/ Serveur TCP
    Par Phébus dans le forum Web & réseau
    Réponses: 2
    Dernier message: 21/07/2005, 16h35

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