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écupérer/envoyer des strings par socket


Sujet :

API standards et tierces Android

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 11
    Points : 8
    Points
    8
    Par défaut Récupérer/envoyer des strings par socket
    Bonjour,

    je souhaite créer un programme "quiz" qui envoie des questions et réponses par socket, le serveur est en java et le client en android, à l'aide d'une AsyncTask j'arrive à me connecter au serveur et récupérer une chaîne de caractère envoyer par le serveur pour remplir automatiquement mes TextView ou RadioButton, mais j'arrive seulement à en récupérer une seule alors que je voudrais en récupérer plusieurs. Comment modifier ma fonction pour que j'arrive à prendre toutes les chaines de caractères envoyées ?

    Voici mon code :

    Coté 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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    public class serveurtest {
     
    	public static void main(String[] args){
    	//	Scanner sc = new Scanner(System.in);
    		int b = 0;
    		ServerSocket socketserver;
    		Socket socketduserveur ;
    		BufferedReader in = null ;
    		PrintWriter out;
    		String rep;
    	 try {
     
    	      socketserver = new ServerSocket(2009);	      
    	      InetAddress address = InetAddress.getLocalHost();
    	      String hostIP = address.getHostAddress() ;
    		  String hostName = address.getHostName();
    		  System.out.println( "Le nom de serveur est : " + hostName + "\nIP: " + hostIP);
    		  System.out.println("Le serveur est à l'écoute du port "+socketserver.getLocalPort());
    	      socketduserveur = socketserver.accept(); 
    		  System.out.println("client connecté");
    		  in = new BufferedReader(new InputStreamReader(socketduserveur.getInputStream()));
    		  out = new PrintWriter(socketduserveur.getOutputStream());
    		  out.println("Question");
    		  out.flush();
    		  out.println("Réponse 1");
    		  out.flush();
    		  out.println("Réponse 2");
    		  out.flush();
    		  out.println("Réponse 3");
    		  out.flush();
    		  out.println("Réponse 4");
    		  out.flush();
    		  rep = in.readLine();
     
    		  socketduserveur.close();
                      socketserver.close();
     
    }
    	 catch (Exception e) {
    	      e.printStackTrace();
    	      System.out.println("erreur 1");
    	    }
    }
    }


    Coté client :

    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
     
    public class main extends Activity {
     
     
     
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
     
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.qcm);
     
    		new ConnectionTask().execute(); 
    	}
     
     
    	class ConnectionTask extends AsyncTask<Void,Void,String>
    	{
     
    		public String doInBackground(Void...params)
    		{
    			String ret = null;
    			BufferedReader in = null;
    			PrintWriter out = null;
    			Socket socket =null ;
     
    			try {
    				socket = new Socket("192.168.10.104",2009);	//adresse IP actuelle du serveur 
    				in = new BufferedReader (new InputStreamReader (socket.getInputStream()));
    				out = new PrintWriter(socket.getOutputStream());
     
    				out.println("coucou");
    				ret = in.readLine();
    			} 
     
    			catch (Exception ex) {
    				// on utilise Log sous android !
    				Log.e("ConnectionTask","Failure !0",ex);
    			}
     
    			finally {
     
    				try {
    					if (out != null) out.close();
    					if (in != null) in.close();
     
    					socket.close();
    				} catch (Exception ex1) {
    					Log.e("ConnectionTask","Failure !1",ex1);
    				}
    			}
    			return ret;
    		}
     
     
     
     
    		// ici on est à nouveau dans le thread "UI" on a donc le droit de modifier celle-ci
    		public void onPostExecute(String result)
    		{
    			if (result != null) {
    				TextView tv = (TextView) main.this.findViewById(R.id.test);
    				tv.setText(result);
    			}
    		}
    	}
    }

    et le xml, qcm.xml :


    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
     
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >
     
        <RadioGroup
            android:id="@+id/group"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checkedButton="@+id/rep1"
            android:orientation="vertical"
            android:paddingTop="20dp" >
     
            <RadioButton
                android:id="@+id/rep1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
     
            <RadioButton
                android:id="@+id/rep2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
     
            <RadioButton
                android:id="@+id/rep3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
     
            <RadioButton
                android:id="@+id/rep4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
        </RadioGroup>
     
        <TextView
            android:id="@+id/test"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:textColor="#C60800"
            android:textSize="20sp" />
     
    </LinearLayout>

    Merci d'avance !

  2. #2
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Avec une boucle sur le readline côté client peut-être?

    Erf, et aussi une boucle sur le serveur probablement...

    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    En effet une boucle sur le readline coté client me permet de lire toutes les strings, cependant je ne peux en renvoyer qu'une seule qui sera prise par onPostExecute ?

  4. #4
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    C'est donc qu'il faut revoir le fonctionnement. Peut-être concatèner les chaînes reçues, ou utiliser une liste, ou autre chose...
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Très bonne idée les listes, j'avais oublié ce que ça existaient, j'ai utilisé des ArrayList et ça fonctionne bien. Merci à toi !

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

Discussions similaires

  1. Envoyer des fichiers par socket
    Par kika10 dans le forum C#
    Réponses: 1
    Dernier message: 09/05/2014, 15h49
  2. récupérer string par socket TCP
    Par bogsy15 dans le forum C++
    Réponses: 14
    Dernier message: 11/06/2006, 16h05
  3. Envoyer des données par la méthode POST
    Par sorry60 dans le forum Langage
    Réponses: 6
    Dernier message: 31/05/2006, 15h10
  4. envoyer des données par mail
    Par zorba49 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 16/12/2005, 11h00
  5. envoyer des données par l'intermédiaire d'un bouton
    Par mathilde50 dans le forum Access
    Réponses: 26
    Dernier message: 28/10/2004, 16h49

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