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 et Exception in thread "main" java.net.SocketException: Connection reset


Sujet :

Entrée/Sortie Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 41
    Points : 35
    Points
    35
    Par défaut Socket et Exception in thread "main" java.net.SocketException: Connection reset
    Salut j'essaie de créer une connection entre 1 client et 1 serveur mais j'obtiens un connexion reset on ecclipse m'indique que le problème vient de l'utilise de readLine() :s car la je voudrais que le serveur m'affiche etape 1 et le message que j'ai envoyé la dès que je rentre le mot de passe au niveau client il ne se passe rien voici le code :
    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
     
    import java.io.*;
    import java.net.*;
    public class Serveur {
     
    	public static void main (String args[]) throws IOException
    	{
    		int PORT=2000;
    		ServerSocket sersoc =new ServerSocket(PORT);
    		System.out.println("Server activé sur le port"+PORT);
    		while(true)
    		{
    		Socket soc=sersoc.accept();
    		String ligne_envoie="fichierararea.dat";
    		InputStream flux=soc.getInputStream();
    		BufferedReader entree=new BufferedReader(new InputStreamReader(flux));
    		//OutputStream renvoie=soc.getOutputStream();
    		//OutputStreamWriter renvoie1=new OutputStreamWriter(renvoie);
    		String message=entree.readLine();	
    		System.out.println("etape 1"+message);
    		/*if (message=="polo")
    		{
    			System.out.println("etap 2");
    			renvoie1.write(ligne_envoie);
    			renvoie1.flush();
    		}
    		else System.out.println("rien");
    		*/
    		}
     
    	}
    }
    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
    import java.io.*;
    import java.net.*;
     
    public class Fichier   {
    	static String adresse="127.0.0.1";
    	static int port =2000;
     
    	public static void main (String args[]) throws IOException
    	{
     
    		Socket soc=new Socket(adresse,port);
    		OutputStream flux=soc.getOutputStream();
    		OutputStreamWriter pass=new OutputStreamWriter(flux);
    		String ligne_lue;
    		String envoie = null;
     
     
    /*		InputStream fluxi=soc.getInputStream();
    		BufferedReader entre=new BufferedReader(new InputStreamReader(fluxi));*/
     
    		System.out.println("Veuillez entrer le mot de passe");
    		ligne_lue=Clavier.lireString();
    		pass.write(ligne_lue);
    		pass.flush();
     
    		/*envoie=entre.readLine();
    		System.out.println("On vous a renvoyé ce nom"+envoie);*/
     
    		//System.out.println("Entrez le nom du fichier a modifier");
    		//envoie=Clavier.lireString();
    		/*DataOutputStream sortie=new DataOutputStream(
    				new BufferedOutputStream(new FileOutputStream(envoie)));
    		int n=1;
    		while(n!=0)
    		{	
    			System.out.println("Entrez un nombre");
    			n=Clavier.lireInt();
    			if(n!=0)sortie.writeInt(n);
    		}
    		sortie.close();
    		System.out.println("Le fichier est fermé");
     
    		System.out.println("Allons lire le fichier");
    		DataInputStream entree=new DataInputStream(new BufferedInputStream(new FileInputStream(envoie)));
    		boolean eof=false;
    		try{
    		while(!eof)
    		{
    			n=entree.readInt();
    			if(!eof)System.out.println(n);
    		}
    		}
    		catch(EOFException e)
    		{
    			eof=true;
    		}
    		entree.close();
    		System.out.println("fin de lecture");*/
    	}
    	}
    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
    import java.io.*;
     
    public class Clavier {
    public static String lireString()
    {
    	String ligne_lue=null;
    	try
    	{
    		InputStreamReader lecteur=new InputStreamReader(System.in);
    		BufferedReader entree=new BufferedReader(lecteur);
    		ligne_lue=entree.readLine();
     
    	}
    	catch(IOException err)
    	{
    		System.exit(0);
     
    	}
    	return ligne_lue;
    }
    public static float lireFloat()
    {
    	float x=0;
    	try
    	{
    		String ligne_lue=lireString();
    		x=Float.parseFloat(ligne_lue);
     
    	}
    	catch(NumberFormatException err)
    	{
    		System.out.println("***Erreur de donnee");
    		System.exit(0);
     
    	}
    	return x;
     
    }
     
    public static double lireDouble()
    {
     
    	double x=0;
    	try
    	{
    		String ligne_lue=lireString();
    		x=Double.parseDouble(ligne_lue);
     
    	}
    	catch(NumberFormatException err)
    	{
    		System.out.println("***Erreur de donnee***");
    		System.exit(0);
    	}
    	return x;
    }
     
    public static int lireInt()
    {
    	int n=0;
    	try
    	{
    		String ligne_lue=lireString();
    		n=Integer.parseInt(ligne_lue);
    	}
    	catch(NumberFormatException err)
    	{
    		System.out.println("***Erreur de donnee***");
    		System.exit(0);
    	}
    	return n;
     
    }
     
    public static void main(String[] args)
    {
    	System.out.println("entre un flot");
    	float x;
    	x=Clavier.lireFloat();
    	System.out.println("merci pour"+x);
    	System.out.println("entre un int");
    	int n;
    	n=Clavier.lireInt();
    	System.out.println("merci pour "+n);
     
    	System.out.println("entre une chaine");
    	String l;
    	l=Clavier.lireString();
    	System.out.println("merci pour"+l);
     
    }
    }
    Il s'agit de l'authentification auprès d'un serveur qui va renvoyer le nom d'un fichier afin que le client (fichier) puisse l'utiliser ,j'ai commenté le reste du cod e vu qu'il était bloqué histoire de pas trop se perdre et Clavier permet la lecture au clavier need help svp ^^

  2. #2
    Membre éclairé Avatar de unknow0
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 452
    Points : 676
    Points
    676
    Par défaut
    Bonjour,

    Perso pour tes flux reseau j'aurais plutot utiliser des DataOutput/InputStream avec les method read/writeUTF au lieu des wrtiter/reader.
    mais bon ca m'etonnerai que le probleme vienne de la.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 18
    Points : 20
    Points
    20
    Par défaut
    La méthode readLine() lit une chaine de caractères jusqu'à rencontré un saut de ligne.

    La méthode write() que tu utilises écrit bien la chaine de caractères, mais pas le saut de ligne.

    Tu peux utiliser un BufferedWriter et appeler write(...) puis newLine() qui va écrire le saut de ligne.

    Sinon, comme le dit unknow0, j'aurais plutôt utiliser aussi des DataInputStream et DataOutputStream.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 41
    Points : 35
    Points
    35
    Par défaut omg
    omg c'est vrai j'ai modifié le code mais je n'ai pas tenu compte du \n c'était ca merci .

    Mais la le problème est qu'il ne passe pas a l'étape 2 ,il ne valide pas le mot pourtant c'est bien le bon moment qu'il m'affiche pour l'étape 1 ,donc j'ai remplacé le tout par des DataIOputStream mais ça me donne la même chose :s :
    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
    public class Fichier   {
    	static String adresse="127.0.0.1";
    	static int port =2000;
    	
    	public static void main (String args[]) throws IOException
    	{
    		
    		Socket soc=new Socket(adresse,port);
    		OutputStream flux=soc.getOutputStream();
    		DataOutputStream pass=new DataOutputStream(flux);
    		String ligne_lue;
    		String envoie = null;
    		
    	
    		InputStream fluxi=soc.getInputStream();
    		DataInputStream entre=new DataInputStream(fluxi);
    		
    		System.out.println("Veuillez entrer le mot de passe");
    		ligne_lue=Clavier.lireString();
    		pass.writeUTF(ligne_lue);
    		pass.flush();
    
    		envoie=entre.readUTF();
    		System.out.println("On vous a renvoyé ce nom"+envoie);
    }
    }
    
    
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    12345678910111213141516171819202122232425262728293031
     
    import java.io.*;
    import java.net.*;
    public class Serveur {
     
    	public static void main (String args[]) throws IOException
    	{
    		int PORT=2000;
    		ServerSocket sersoc =new ServerSocket(PORT);
    		System.out.println("Server activé sur le port"+PORT);
    		while(true)
    		{
    		Socket soc=sersoc.accept();
    		String ligne_envoie="fichierararea.dat";
    		OutputStream out=soc.getOutputStream();
    		DataOutputStream flux=new DataOutputStream(out);
    		InputStream in=soc.getInputStream();
    		DataInputStream renvoie=new DataInputStream(in);
     
    		String message=renvoie.readUTF();	
    		System.out.println("etape 1"+message);
    		if (message=="polo")
    		{
    			System.out.println("etap 2");
    			flux.writeUTF(ligne_envoie);
    			flux.flush();
    		}
    		else System.out.println("rien");
    		}
    	}
    }
    Il passe dans le else et m'affiche "rien" ... ;

  5. #5
    Membre éclairé Avatar de unknow0
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 452
    Points : 676
    Points
    676
    Par défaut
    Bonjour,

    pour tester l'egaliter des chaine de caractaire utilise la methode equal plutot que ==

    Cordialement

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 41
    Points : 35
    Points
    35
    Par défaut
    En effet en utilisant equals ca marche bien vieux réflexe de programmation de C de me focaliser sur "=="... merci !

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 04/07/2008, 17h58
  2. Exception java.net.SocketException connection reset
    Par cigala5555 dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 22/05/2008, 22h33

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