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 :

Socket : difference entre mode actif et passif


Sujet :

Entrée/Sortie Java

  1. #1
    Membre du Club
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 141
    Points : 66
    Points
    66
    Par défaut Socket : difference entre mode actif et passif
    Bonjour,

    je decouvre actuellement les socket en java et j'essaie de developper une application entre un client et un serveur pour qu'il puissent communiquer.

    enfet j'envoi 10 fois un message au serveur (avec une boucle while) et j'affiche ce message.

    Tout se passe bien jusqu'à la fin du programme. Voici le code pour que cela soit plus parlant

    classe server:

    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
    
    import java.net.*;
    import java.io.*;
    
    public class server  {
    	
    	static final int port = 8080;
    	
    	public static void main (String [] args)throws Exception{
    		
    		ServerSocket srv = new ServerSocket(port);
    		System.out.println("Démarré " + srv);
    		
    		try{
    			
    			Socket soc = srv.accept(); //Le serveur stoppe et attend une 
                                          //demande de conexion
    			try{
    				
    				System.out.println("Connexion acceptée " + soc);
    				
    				BufferedReader reception = new BufferedReader(
    							                       new InputStreamReader(
    							                        	 soc.getInputStream())
    							                                  );
    					
    				PrintWriter envoi = new PrintWriter(
    						                 new BufferedWriter(
    						                		 new OutputStreamWriter(
    						                         	soc.getOutputStream())), true);
    					                            
    				while (true){
    					
    					String msg = reception.readLine();
    					if (msg.equals("end"))break;
    					System.out.println("echo " + msg);
    					envoi.println(msg);
    						
    				}
    				
    				
    			}finally{
    				
    				System.out.println("closing...");
    				soc.close();
    				
    			}
    		}finally{
    			
    			srv.close();
    		}
    classe 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
     
     
    import java.net.*;
    import java.io.*;
     
    public class client  {
     
    	public static void main (String [] args) throws IOException{
     
     
    		InetAddress ip = InetAddress.getByName("192.168.1.36");
    		System.out.println("Adresse ip : " + ip);
    		Socket soc = new Socket (ip, server.port);
    		try{
    			System.out.println("Socket : " + soc);
    			     BufferedReader entree = new BufferedReader(
    			    		                      new InputStreamReader(
    			    		                     	     soc.getInputStream()));
     
    			     PrintWriter sortie = new PrintWriter(
    			    		                    new BufferedWriter(
    			    		                     new OutputStreamWriter(
    			    		                    		 soc.getOutputStream())),true);
     
    			     int i = 0;
    			     while (i<10){
     
    			    	 sortie.println("ca marche " + i);
    			    	 String mdg = entree.readLine();
    			    	 System.out.println(mdg);
    			    	 i++;
     
    			     }
    			     sortie.println("END");
     
    	    }finally{
     
    	    	     System.out.println("closing..0.");
    			     soc.close();
    		}
     
     
    	}
    et voici ce que j obtiens (sous Eclipse) :

    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
     
     
    Démarré ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=8080]
    Connexion acceptée Socket[addr=/192.168.1.36,port=33007,localport=8080]
    echo PW ca marche 0
    echo PW ca marche 1
    echo PW ca marche 2
    echo PW ca marche 3
    echo PW ca marche 4
    echo PW ca marche 5
    echo PW ca marche 6
    echo PW ca marche 7
    echo PW ca marche 8
    echo PW ca marche 9
    echo END
    Exception in thread "main" java.net.SocketException: Connection reset
    	at java.net.SocketInputStream.read(SocketInputStream.java:168)
    	at sun.nio.cs.StreamDecoder$CharsetSD.readBytes(StreamDecoder.java:411)
    	at sun.nio.cs.StreamDecoder$CharsetSD.implRead(StreamDecoder.java:453)
    	at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:183)
    	at java.io.InputStreamReader.read(InputStreamReader.java:167)
    	at java.io.BufferedReader.fill(BufferedReader.java:136)
    	at java.io.BufferedReader.readLine(BufferedReader.java:299)
    	at java.io.BufferedReader.readLine(BufferedReader.java:362)
    	at server.main(server.java:39)
    closing...
    la ligne 39 de la classe server est : String msg = reception.readLine();

    Quelqu'un pourrait me dire pourquoi j'obtiens ces exceptions et comment les resoudre?

    J'ai trouvé sur le web que cela pouvait provenir du mode passif ou actif. Mais je ne sais pas à quoi cela correspond ni comment utiliser l un ou l autre.

    Merci de m aider

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Normal que ça plante : le serveur s'arrête avant d'envoyer la dernière commande "end". Il faut mettre la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (msg.equals("end"))break;
    à la fin de la boucle "while", et non au milieu.

  3. #3
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Et puis aussi : le client envoie "END" puis s'arrête, alors que le serveur a encore des choses à lui dire. Pour le client, la communication est terminée, alors que pour le serveur elle continue : tu dois améliorer ton protocole de communication.

  4. #4
    Membre du Club
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 141
    Points : 66
    Points
    66
    Par défaut
    je viens de voir vos réponses je vais essayez cela merci

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

Discussions similaires

  1. difference entre mode debug et release
    Par haykelFST dans le forum C++
    Réponses: 5
    Dernier message: 23/06/2011, 09h10
  2. ftp : mode actif ou passif ?
    Par troumad dans le forum OVH
    Réponses: 0
    Dernier message: 06/11/2010, 10h00
  3. Socket difference entre Bind et Connect?
    Par horse dans le forum Réseau/Web
    Réponses: 2
    Dernier message: 01/05/2010, 18h22
  4. PyQt4/socket : difference entre bytes et rawData
    Par Invité dans le forum Réseau/Web
    Réponses: 1
    Dernier message: 08/01/2010, 02h39
  5. [Concept] Différence entre rmi et les socket
    Par Luther13 dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 14/12/2005, 14h31

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