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

Entrée/Sortie Java Discussion :

[Debutant][Socket]mise en boucle


Sujet :

Entrée/Sortie Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 7
    Points : 7
    Points
    7
    Par défaut [Debutant][Socket]mise en boucle
    Bonjour à tous,

    J'ai créé une application avec une serveur socket.
    J'arrive à s'y faire connecter un "client" en java, une autre petite application. Quand on se connecte au serveur, cela déclanche l'envoi et la réception de quelques phrases, quelque chose de très simple.

    En fait je souhaiterais pouvoir connecter plusieurs clients à la suite, en gros suivant ce mode :

    connection au server, réception des infos, puis plus tard reconnection etc...

    Mais Je n'arrive pas a faire en sorte de boucler au niveau du serveur . J'ai essayer de mettre un while(true) pour boucler indéfiniment sur les instructions a répéter, mais j'ai une erreur (connection reset).
    Vous auriez des idées ?

    Merci d'avance

  2. #2
    Membre expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Points : 3 065
    Points
    3 065
    Par défaut
    est ce que tu pourrais mettre le code ?
    ca sera plus simple pour qu'on puisse voir ce qui peut ne pas aller

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Le code de la methode run, sans l'essai du while
    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
     
    public void run()
    {
    	String tab[];
    	String str;
    	String temp;
     
    	try
    	{
    		TDserver serv = new TDserver(9696);
    		serv.write("Connection Success !");
    		temp = serv.read();
    		System.out.println(temp);
    		if(temp.equals("receive"))
    		{
    			tab = nomfichbat(".");
    			serv.write(Integer.toString(Array.getLength(tab)));
    		System.out.println(Integer.toString(Array.getLength(tab)));
    			for (int i = 0;i<Array.getLength(tab);i++)
    			{
    				serv.write(tab[i]);
    			}
    			serv.write("Please type the name of the product you want to install or quit to exit.");
    			boolean done = false;
    			while (!done)
    			{
    				str = serv.read();
    				for (int i = 0;i<Array.getLength(tab);i++)
    				{
    					if(str.equals(tab[i]))
    					{
    						serv.execut(str);
    						System.out.println(str + " execution !!");
    						serv.write(str + " execution !!");
    						done = true;
    					}
    					else if((str + ".bat").equals(tab[i]))
    					{
    						serv.execut(str+".bat");
    						System.out.println(str + " execution !!");
    						serv.write(str + " execution !!");
    						done = true;
    					}
     
    				}
     
    				if (!done)
    				{
    					if(str.toLowerCase().equals("quit"))
    					{
    						serv.write("Bye bye");
    						System.out.println("Quit");
    						done = true;
    					}
    					else
    					{
    						serv.write("Error : type a product or quit");
    					}
    				}
    			}
    		}
    		System.out.println("test");
    	}
    	catch(Exception e)
    	{
    		System.out.println(e);
    	}
    }
    La methode write() permet d'écrire sur le flux en sortie en prenant un string en paramètre, la methode read() lit le flux en entré de la socket et enfin la methode execut() sert a executer une commande dos.
    Le constructeur de TDServeur est le suivant :

    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
     
    public TDserver(int port)
    {
    	try
    	{
    		ss = new ServerSocket(port);
    		sc = ss.accept();
    		in = new BufferedReader(new InputStreamReader(sc.getInputStream()));
    		out = new PrintWriter(sc.getOutputStream());
    	}
    	catch (Exception e)
    	{
    		System.out.println(e);
    	}
    }

  4. #4
    Membre habitué Avatar de Wookai
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2004
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2004
    Messages : 307
    Points : 180
    Points
    180
    Par défaut
    A mon avis, si tu veux gérer plusieurs connexions à la suite, tu devrais avoir un code de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ServerSocket listener = new ServerSocket(1234); // écoute sur le port 1234
     
    while (true) {
     Socket sock = listener.accept();
     
     // traitement sur le socket...
     
     sock.close();
    }
    EDIT: désolé, j'avais pas vu ton post... Il me semble que tu ne fermes pas ton socket, peut-être est-ce le problème ? Essaie de créer une méthode close() dans ta classe TDSocket...

  5. #5
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Je vais essayer ça merci ^^

    J'ai une methode close() qui me ferme la socket
    J'ai créé une méthode init() dans ma classe TDServer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public void init()
    {
    	try
    	{
    		sc = ss.accept();
    		in = new BufferedReader(new InputStreamReader(sc.getInputStream()));
    		out = new PrintWriter(sc.getOutputStream());
    	}
    	catch (Exception e)
    	{
    		System.out.println(e);
    	}
    }
    et le constructeur de cette classe est donc devenu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public TDserver(int port)
    {
    	try
    	{
    		ss = new ServerSocket(port);
    	}
    	catch (Exception e)
    	{
    		System.out.println(e);
    	}
    }
    Et donc a l'appel de la methode run je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    	public void run()
    	{
    		String tab[];
    		String str;
    		String temp;
    		TDserver serv = new TDserver(9696);
     
    		try
    		{
    			while(true)
    			{
    			serv.init();
    etc...
    Ca a l'air de fonctionner, je vais essayer de rajouter le close() à la fin

    [Edit] ça fonctionne merci à tous les deux

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

Discussions similaires

  1. [Debutant/WinAPI] Souci avec boucle While et GetMessage()
    Par SnowStyle dans le forum Windows
    Réponses: 11
    Dernier message: 15/10/2005, 19h19
  2. Réponses: 2
    Dernier message: 11/10/2005, 00h31
  3. [Debutant] Optimisation d'une boucle
    Par Javatator dans le forum Langage
    Réponses: 3
    Dernier message: 25/10/2004, 18h50
  4. [Debutant(e)]mise à jour de mon formulaire via JSP
    Par kouadjalain dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 11/08/2004, 15h43
  5. [Socket] Pb de boucle infinie
    Par Myogtha dans le forum Entrée/Sortie
    Réponses: 12
    Dernier message: 10/06/2004, 14h10

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