Exception sur une socket?? [Résolu]

Zelda78 7 Messages postés mardi 29 mars 2011Date d'inscription 10 mars 2014 Dernière intervention - 19 avril 2011 à 11:17 - Dernière réponse :  Utilisateur anonyme
- 19 avril 2011 à 21:15
Bonjour,

J'ai fait un programme qui ouvre une socket et un autre qui ecrit dedant.
mon probleme ne viens pas de la socket.

je voudrais metre une exception au moment de créér la socket

le probleme c'est que je comprend rien aux exceptions.
[b]dans le cas ou j'en mets pas si je fais javac Client.java je n'ai pas d'erreur et ça fonctionne.
Si je mets les exceptions j'ai 3 erreurs, il ne doit pas creer l'exception./b

mon code c'est:
import java.io.*;
import java.net.*;
import java.util.logging.Level;
import java.util.logging.Logger;
class Client {
public static void main(String[] args) throws Exception {

        int port =  1890;
        String message = "tata";
        InetAddress ip = InetAddress.getByName("192.168.0.1");


    //   try { 
        Socket socket = new Socket(ip, port);
   //        } catch (IOException e) {
   //      System.out.println("erreur "+ ip + ":" + port + ":\n" + e + "\n");
   //        }

        BufferedReader plec = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        PrintWriter pred = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);

        String str = message;
           pred.println(str);          // envoi d'un message
           str = plec.readLine();      // lecture de l'echo
        System.out.println("END");     // message de terminaison
        pred.println("END") ;
        plec.close();
        pred.close();
        socket.close();
   }}




quand je retire les exceptions des commentaires j'ai les 3 erreures suivantes:
root@ubuntu-virtual-machine:/home/ubuntu/Bureau# javac Client.java
Client.java:19: cannot find symbol
symbol : variable socket
location: class Client
BufferedReader plec = new BufferedReader(new InputStreamReader(socket.getInputStream()));
^
Client.java:20: cannot find symbol
symbol : variable socket
location: class Client
PrintWriter pred = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
^
Client.java:29: cannot find symbol
symbol : variable socket
location: class Client
socket.close();
^
3 errors



quelqu'un peut me dire pourquoi ca ne fonctionne pas? comment on gere avec les exceptions?


merci beaucoup
Afficher la suite 

1 réponse

Répondre au sujet
Utilisateur anonyme - 19 avril 2011 à 21:15
+3
Utile
Salut,

Le problème de vient pas de l'exception en elle même mais du bloc qui la gère.

Petit topo : quand je dis un bloc, cela peut être un try/catch, une boucle ect
Il faut savoir que quand tu déclares une variable dans un bloc (Objet obj1 = new Objet()), cette variable n'existe que dans le bloc . Une fois que tu en sors, elle est détruite.

Quand tu commentes ton exception et le bloc try/catch, ta variable socket est située dans ta méthode main et rien d'autre. Donc les méthode et les constructeurs qui l'utilisent comme tes objets plec et pred n'ont pas de problème.

Mais quand tu décommentes tout, ta variable socket se trouve dans un bloc. Elle est déclarée et créée dans le try/catch. Donc une fois sorti de ton try/catch, tes objets plec et pred utilisent un objet socket mais qui n'est ni déclaré, ni instancié. D'où les message d'erreur.

Change ton main par :

public static void main(String[] args) throws Exception {

        int port    = 1890;
        String message = "tata";
        InetAddress ip = InetAddress.getByName("192.168.0.1");
        Socket socket = null;

    //   try { 
             socket = new Socket(ip, port);
   //        } catch (IOException e) {
   //      System.out.println("erreur "+ ip + ":" + port + ":\n" + e + "\n");
   //        }

        BufferedReader plec = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        PrintWriter pred = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);

        String str = message;
           pred.println(str);          // envoi d'un message
           str = plec.readLine();      // lecture de l'echo
        System.out.println("END");     // message de terminaison
        pred.println("END") ;
        plec.close();
        pred.close();
        socket.close();
   }}



-- Pylouq : jongleur de clavier AZERTY et de clavier QWERTZ --
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Utilisateur anonyme

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.