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 :

Sockets - client serveur


Sujet :

Entrée/Sortie Java

  1. #21
    Membre du Club Avatar de Vinceee38
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 134
    Points : 65
    Points
    65
    Par défaut
    j'ai trouvé ca sur le web :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Make sure to create the input stream only after you have written the object(s).
     
    Otherwise, if you create the input stream before, you will get this EOF.
    Je ne sais pas si ca peut aider...

  2. #22
    Membre actif Avatar de Torg666
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 230
    Points : 254
    Points
    254
    Par défaut
    En cherchant sur le forum, j'ai trouvé cette discution:
    http://www.developpez.net/forums/d18...st-darret-eof/

    Apperement ca dois venir de la condition de la boucle while.
    Peux-tu redonner l'integralite du code de connectionhandler stp
    La javaDoc est mon amie, elle est la tienne aussi!

  3. #23
    Membre du Club Avatar de Vinceee38
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 134
    Points : 65
    Points
    65
    Par défaut
    C'est moi qui te remercie !

    ConnectionHandler:

    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
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.lang.ClassNotFoundException;
    import java.net.Socket;
     
    class ConnectionHandler implements Runnable  {
        private Socket socket;
        private ServerSocketTrain serveur;
        private Thread t;
     
        public ConnectionHandler(Socket socket,ServerSocketTrain serveur) {
            this.socket = socket;
            this.serveur=serveur;
            t = new Thread(this);
            t.start();
     
        }
     
        public void run() {
            try
            {
            	  //on créé les moyen de communiquer avec le client
            	  ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
            	  ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
     
            	  //de fait on envoie la liste des trains au client
            	  //pas certain qu'on puisse directement envoyer un tableau de string 
            	  //mais on  va faire comme si
            	  oos.writeObject(serveur.afficherListeTrain());
            	  oos.flush();
            	  Object lecture;
            	  while(!socket.isClosed()){
            		  lecture=ois.readObject();
     
            		  if(lecture instanceof Reservation){
            			  int idTrain=((Reservation) lecture).getIdTrain();
            			  Train train=null;
            			  for(int cpt=0;cpt<serveur.getListeTrain().size();cpt++){
            				  if(serveur.getListeTrain().get(cpt).getIdTrain()==idTrain){
            					  train=serveur.getListeTrain().get(cpt);
            					  break;
            				  }
            			  }
            			  if(train!=null){
            				  boolean ajout=train.ajouterBillet(((Reservation) lecture).getBillet());
            				  oos.writeBoolean(ajout);
            				  oos.flush();
            				  Thread.sleep(100);
     
            				  oos.writeObject(serveur.afficherListeTrain());
            				  oos.flush();
            			  }
            		  } 
            	  }
            	  oos.close();
            	  ois.close();
     
            } catch (IOException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
    			e.printStackTrace();
    		}
        }
     
     
    }
    Je vais aller voir le sujet dont tu parles, je ne penses pas que je comprendrais mieux que toi mais on sait jamais j'aurais peut etre un declic

  4. #24
    Membre actif Avatar de Torg666
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 230
    Points : 254
    Points
    254
    Par défaut
    ok donc la EOFexception est normale, il faut la gérer.
    J'ai modifié le code donc j'envoi toutes les classes:
    ClientSocketTrain
    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
     
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.net.InetAddress;
    import java.net.Socket;
    import java.net.UnknownHostException;
     
    public class ClientSocketTrain {
     
    	public static void main(String[] args) {
    		ObjectOutputStream oos=null;
    		ObjectInputStream ois=null;
    		Socket socket=null;
    		String[] tableString=null;
    		Object message=null;
    		try {
    // Creer une connection avec le socket serveur sur l'application du serveur
    // A propos ça marche uniquement si les 2 appli tourne sur le meme poste.
    			InetAddress host = InetAddress.getLocalHost();
    			socket = new Socket(host.getHostName(), 8765);
    // Envoie un message à l'application serveur (client à l'origine)
    			oos = new ObjectOutputStream(socket.getOutputStream());
    			oos.writeObject("test");
    			oos.flush();
     
    			ois = new ObjectInputStream(socket.getInputStream());
    			message= ois.readObject();
    		// Lit et affiche la réponse du message envoyé par l'application serveur
    			if(message instanceof String[]){
    				tableString=(String[])message;
    			 //et ensuite passer ca dans une boucle
    				for(int cpt=0;cpt< tableString.length;cpt++){
    					System.out.println(tableString[cpt]);
    				}
    			}
    		} catch (UnknownHostException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		} catch (ClassNotFoundException e) {
    			e.printStackTrace();
    		}catch (ClassCastException e) {
    			e.printStackTrace();
    //Block finally pour s'assurer que tout est bien fermé
    		}finally{
    			try{
    				oos.close();
    				ois.close();
    				socket.close();
    			}catch(IOException ioe){
    				ioe.printStackTrace();
    			}
    		}
    	}
    }
    ServerSocketTrain
    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.io.IOException;
    import java.net.ServerSocket;
    import java.util.ArrayList;
     
    public class ServerSocketTrain {
        private ServerSocket server;
        private int port = 8765;
        private ArrayList<Train> listeTrain;
     
        public static void main(String[] args) {
            ServerSocketTrain example = new ServerSocketTrain();
            example.handleConnection();
        }
     
        public ServerSocketTrain() {
            try {
                server = new ServerSocket(port);
                listeTrain=new ArrayList<Train>();
                listeTrain.add(new Train(1,"Toulouse",20));
                listeTrain.add(new Train(2,"Rouen",10));
                listeTrain.add(new Train(3,"Montpellier",30));
                listeTrain.add(new Train(4,"Paris",50));
            }catch (IOException e) {
            	e.printStackTrace();
            }	
        }
        public void handleConnection() {
            System.out.println("En attente du message du client...");
    // Ici le serveur fait une boucle pour accepter toutes les connections engagées par
    // l'application cliente.
            while (!server.isClosed()) {
                try {
                    new ConnectionHandler(server.accept(), this);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
     
        public String[] afficherListeTrain(){
        	String[] list=new String[listeTrain.size()];
        	for(int cpt=0;cpt<listeTrain.size();cpt++){
        		list[cpt]= listeTrain.get(cpt).afficherTrain();
        	}
        	return list;
        }
     
        public ArrayList<Train> getListeTrain(){
        	return listeTrain;
        }
    }
    ConnectionHandler
    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
     
    import java.io.EOFException;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.lang.ClassNotFoundException;
    import java.net.Socket;
     
    class ConnectionHandler implements Runnable  {
        private Socket socket=null;
        private ServerSocketTrain serveur=null;
        private Thread t=null;
        private ObjectInputStream ois=null;
        private ObjectOutputStream oos=null;
        private Object lecture=null;
        private int idTrain=0;
        private Train train=null;
        private boolean ajout=false;
        private boolean hasObject=false;
     
        //Constructeur
        public ConnectionHandler(Socket socket,ServerSocketTrain serveur) {
            this.socket = socket;
            this.serveur=serveur;
            t = new Thread(this);
            t.start();
        }
        //fonction run du thread
        public void run() {
            try{
    //on créé les moyen de communiquer avec le client
            	ois = new ObjectInputStream(socket.getInputStream());
            	oos = new ObjectOutputStream(socket.getOutputStream());
    //de fait on envoie la liste des trains au client
    //pas certain qu'on puisse directement envoyer un tableau de string 
    //mais on  va faire comme si
            	oos.writeObject(serveur.afficherListeTrain());
            	oos.flush();
            	hasObject=true;
            	while(!socket.isClosed()&& hasObject){
            		try{
            			lecture=ois.readObject();
            			if(lecture instanceof Reservation){
            				idTrain=((Reservation) lecture).getIdTrain();
            				for(int cpt=0;cpt<serveur.getListeTrain().size();cpt++){
            					if(serveur.getListeTrain().get(cpt).getIdTrain()==idTrain){
            						train=serveur.getListeTrain().get(cpt);
            						break;
            					}
            				}
            				if(train!=null){
            					ajout=train.ajouterBillet(((Reservation) lecture).getBillet());
            					oos.writeBoolean(ajout);
            					oos.flush();
            					oos.writeObject(serveur.afficherListeTrain());
            					oos.flush();
            				}
            			}else if(lecture instanceof String){
            				System.out.println((String)lecture);
            			}
            		}catch(EOFException eof){
            			hasObject=false;
            			System.out.println("Fin connection du client");
            		}
            	}
            } catch (IOException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }finally{
    			try {
    				ois.close();
    				oos.close();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
        	}
        }
    }
    Train
    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
     
    public class Train{
    	private int idTrain;
    	private String destination;
    	private Billet[] tabBillet;
     
     //constructeur de Train
    	public Train(int idTrain,String destination, int nbPlace){
    		this.idTrain=idTrain;
    		this.destination=destination;
    		tabBillet=new Billet[nbPlace];
    	}
     //Fonction pour ajouter un billet au train
     //elle retourne true si le billet est ajouté, sinon false.
     //elle est synchronized pour qu'un seul thread puisse l'utiliser en même temps
    	public synchronized boolean ajouterBillet(Billet leBillet){
    		for(int cpt=0;cpt<tabBillet.length;cpt++){
    			if(tabBillet[cpt]==null){
    				tabBillet[cpt]=leBillet;
    				return true; 
    			}
    		}
    		return false;
    	}
     //Fonction pour afficher ton train
    	public String afficherTrain(){
    		int nbPlaceLibre=0;
    		for(int cpt=0;cpt<tabBillet.length;cpt++){
    			if(tabBillet[cpt]==null){
    				nbPlaceLibre=tabBillet.length-cpt;
    				break;
    			}
    		}
    		return "Train N°"+idTrain+",Destination: "+destination+", Nbre place dispo: "+nbPlaceLibre;
    	}
     //accesseur sur idTrain
    	public int getIdTrain(){
    		return idTrain;
    	}
    }
    Billet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public class Billet{
    	private String nomDuClient;
     
     //constructeur de l'objet Billet
    	public Billet(String nomDuClient){
    		this.nomDuClient=nomDuClient;
    	}
    }
    Reservation
    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
     
    import java.io.Serializable;
     
    public class Reservation implements Serializable{
    	private int idTrain;
    	private Billet leBillet;
     
    	public Reservation(int idTrain, String nomClient){
    		this.idTrain=idTrain;
    		this.leBillet=new Billet(nomClient);
    	}
    //accesseurs
    	public int getIdTrain(){
    		return this.idTrain;
    	}
    	public Billet getBillet(){
    		return leBillet;
    	}
    }
    Bon et la ca marche

    Bon il te reste à faire:
    - Afficher le nombre de clients connectés: je t'ai donné la solution, reste qu'a l'implementer.
    - Ecouter la saisie du client et envoyer une reservation au serveur: je te conseil de regarder la classe scanner dans la javadoc, il faut aussi que tu ajoute la classe reservation du côté client.
    - Ecouter la reponse du serveur lorsqu'il repond a une reservation.
    - Selon l'ennoncé, il te faut introduire une validation avant d'ajouter un billet au train (l'histoire de commit en 2 phases si j'ai bien pigé)
    - le multithreading.... voir le tutorial sur la synchronisation.

    Hésite pas si tu as des questions, mais avec ce qu'on a déjà fait et pour peux que tu ai un peu compris ca devrai pas poser trop de souci
    La javaDoc est mon amie, elle est la tienne aussi!

  5. #25
    Membre du Club Avatar de Vinceee38
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 134
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par Torg666 Voir le message
    Bon et la ca marche

    Bon il te reste à faire:
    - Afficher le nombre de clients connectés: je t'ai donné la solution, reste qu'a l'implementer.
    - Ecouter la saisie du client et envoyer une reservation au serveur: je te conseil de regarder la classe scanner dans la javadoc, il faut aussi que tu ajoute la classe reservation du côté client.
    - Ecouter la reponse du serveur lorsqu'il repond a une reservation.
    - Selon l'ennoncé, il te faut introduire une validation avant d'ajouter un billet au train (l'histoire de commit en 2 phases si j'ai bien pigé)
    - le multithreading.... voir le tutorial sur la synchronisation.

    Hésite pas si tu as des questions, mais avec ce qu'on a déjà fait et pour peux que tu ai un peu compris ca devrai pas poser trop de souci

    Rolala effectivement tout marche maintenant c'est génial merci beaucoup

    Dans un premier je vais essayer de prendre en compte la saisie du client pour créer une réservation ! ca sera deja bien ! Je te tiens au courant

    MERCI MERCI MERCI encore !

  6. #26
    Membre du Club Avatar de Vinceee38
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 134
    Points : 65
    Points
    65
    Par défaut
    Me revoila lol

    J'ai reussi à faire en sorte que l'utilisateur rentre un numéro pour capturer sa demande et l'envoyer au serveur en faisant comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    			oos = new ObjectOutputStream(socket.getOutputStream());
     
    			BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    			String capture = in.readLine();
     
    			oos.writeObject(capture);
    			oos.flush();
    Par contre ce que je n'arrive pas à modifier c'est le fait que la liste des trains apparait qu'aprés que l'utilisateur ait saisie son texte.

    Comment puis je modifier ceci ? merci d'avance

    faire en sorte que la liste des trains apparaissent directement quand l'utilisateur se connecte, et que la saisie soit demandée aprés l'affichage de la liste

  7. #27
    Membre actif Avatar de Torg666
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 230
    Points : 254
    Points
    254
    Par défaut
    Dans connectionhandler
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            				if(train!=null){
            					ajout=train.ajouterBillet(((Reservation) lecture).getBillet());
            					oos.writeBoolean(ajout);
            					oos.flush();
    //ici je revoi la liste des trains
    //        					oos.writeObject(serveur.afficherListeTrain());
    //        					oos.flush();
            				}
    De plus:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	oos = new ObjectOutputStream(socket.getOutputStream());
     
    			BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    			String capture = in.readLine();
     
    			oos.writeObject(capture);
    			oos.flush();
    tu renvois un String au serveur, il ne va pas savoir l'interpreter correctement (il devrai juste l'afficher). Par contre si tu envoie un objet Reservation, il va l'interpreter et en plus te repondre true/false.
    Attention y a quelque petite modif:
    ConnectionHandler
    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
     
    import java.io.EOFException;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.lang.ClassNotFoundException;
    import java.net.Socket;
     
    class ConnectionHandler implements Runnable  {
        private Socket socket=null;
        private ServerSocketTrain serveur=null;
        private Thread t=null;
        private ObjectInputStream ois=null;
        private ObjectOutputStream oos=null;
        private Object lecture=null;
        private int idTrain=0;
        private Train train=null;
        private boolean ajout=false;
        private boolean hasObject=false;
     
        //Constructeur
        public ConnectionHandler(Socket socket,ServerSocketTrain serveur) {
            this.socket = socket;
            this.serveur=serveur;
            t = new Thread(this);
            t.start();
        }
        //fonction run du thread
        public void run() {
            try{
    //on créé les moyen de communiquer avec le client
            	ois = new ObjectInputStream(socket.getInputStream());
            	oos = new ObjectOutputStream(socket.getOutputStream());
    //de fait on envoie la liste des trains au client
    //pas certain qu'on puisse directement envoyer un tableau de string 
    //mais on  va faire comme si
            	oos.writeObject(serveur.afficherListeTrain());
            	oos.flush();
            	hasObject=true;
            	while(!socket.isClosed()&& hasObject){
            		try{
            			lecture=ois.readObject();
            			if(lecture instanceof Reservation){
            				idTrain=((Reservation) lecture).getIdTrain();
            				for(int cpt=0;cpt<serveur.getListeTrain().size();cpt++){
            					if(serveur.getListeTrain().get(cpt).getIdTrain()==idTrain){
            						train=serveur.getListeTrain().get(cpt);
            						break;
            					}
            				}
            				if(train!=null){
            					ajout=train.ajouterBillet(((Reservation) lecture).getBillet());
            					oos.writeObject(new Boolean(ajout));
            					oos.flush();
            					oos.writeObject(serveur.afficherListeTrain());
            					oos.flush();
            				}
            			}else if(lecture instanceof String){
            				System.out.println((String)lecture);
            			}
            		}catch(EOFException eof){
            			hasObject=false;
            			System.out.println("Fin connection du client");
            		}
            	}
            } catch (IOException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }finally{
    			try {
    				ois.close();
    				oos.close();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
        	}
        }
    }
    ClientSocketTrain
    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
     
    import java.io.EOFException;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.net.InetAddress;
    import java.net.Socket;
    import java.net.UnknownHostException;
    import java.util.Scanner;
     
    public class ClientSocketTrain {
     
    	public static void main(String[] args) {
    		ObjectOutputStream	oos=null;
    		ObjectInputStream 	ois=null;
    		Socket 				socket=null;
    		String[] 			tableString=null;
    		Object 				message=null;
    		boolean 			hasObject=false;
    		Scanner 			scan=new Scanner(System.in);
    		String 				nom=null;
    		int 				idTrain=0;
    		try {
    // Creer une connection avec le socket serveur sur l'application du serveur
    // A propos ça marche uniquement si les 2 appli tourne sur le meme poste.
    			InetAddress host = InetAddress.getLocalHost();
    			socket = new Socket(host.getHostName(), 8765);
    			oos = new ObjectOutputStream(socket.getOutputStream());
    			ois = new ObjectInputStream(socket.getInputStream());
    // Envoie un message à l'application serveur (client à l'origine)
    			oos.writeObject("test");
    			oos.flush();
    			hasObject=true;
    			while(!socket.isClosed() && hasObject){
    				try{
    					message= ois.readObject();
    					// Lit et affiche la réponse du message envoyé par l'application serveur
    						if(message instanceof String[]){
    							tableString=(String[])message;
    						 //et ensuite passer ca dans une boucle
    							System.out.println("Liste des trains:");
    							for(int cpt=0;cpt< tableString.length;cpt++){
    								System.out.println(tableString[cpt]);
    							}
    							if(nom==null){
    								System.out.println("Saisissez votre nom: ");
    								nom=scan.nextLine();
    								System.out.println();
    							}
    							System.out.println("Choissez votre train: ");
    							idTrain=scan.nextInt();
    							oos.writeObject(new Reservation(idTrain,nom));
    							oos.flush();
    						}else if(message instanceof Boolean){
    							if((Boolean)message){
    								System.out.println("Reservation confirmée.");
    							}else{
    								System.out.println("Train complet, impossible de reserver une place");
    							}
    						}
    				}catch(EOFException eof){
    					hasObject=false;
    				}
    			}
    		} catch (UnknownHostException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		} catch (ClassNotFoundException e) {
    			e.printStackTrace();
    		}catch (ClassCastException e) {
    			e.printStackTrace();
    //Block finally pour s'assurer que tout est bien fermé
    		}finally{
    			try{
    				oos.close();
    				ois.close();
    				socket.close();
    			}catch(IOException ioe){
    				ioe.printStackTrace();
    			}
    		}
    	}
    }
    Billet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    import java.io.Serializable;
     
    public class Billet implements Serializable{
    	private String nomDuClient;
     
     //constructeur de l'objet Billet
    	public Billet(String nomDuClient){
    		this.nomDuClient=nomDuClient;
    	}
    }
    Pense à ajouter Reservation et Billet dans l'appli cliente.

    Chez moi ca marche
    La javaDoc est mon amie, elle est la tienne aussi!

  8. #28
    Membre du Club Avatar de Vinceee38
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 134
    Points : 65
    Points
    65
    Par défaut
    C'est parfait ce que tu m'as donné ! C'est exactement ce qu'il me fallait !
    Je vais essayer d'ameliorer un peu le programme mais la je pense qu'il est deja bien avancé

    En tout cas je ne serais jamais arrivé la sans ton aide.

    Je te remercie encore

  9. #29
    Membre actif Avatar de Torg666
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 230
    Points : 254
    Points
    254
    Par défaut
    Citation Envoyé par Vinceee38 Voir le message
    C'est parfait ce que tu m'as donné ! C'est exactement ce qu'il me fallait !
    Je vais essayer d'ameliorer un peu le programme mais la je pense qu'il est deja bien avancé

    En tout cas je ne serais jamais arrivé la sans ton aide.

    Je te remercie encore
    De rien, ca tombé bien parceque là je suis entre 2 projets donc j'ai pas grand chose à faire. Je viens de terminer un projet la dessus sauf que je ne recois pas des objets, mais des octets à traiter...
    j'espère que t'as compris... parceque si t'on prof te pose des questions ça risque de poser problème
    La javaDoc est mon amie, elle est la tienne aussi!

  10. #30
    Membre du Club Avatar de Vinceee38
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 134
    Points : 65
    Points
    65
    Par défaut
    lol oui je pense avoir compris la base
    Je vais prendre le temps de bien regarder ce soir avant de l'envoyer

    J'ai eu de la chance alors que tu passes dans le coin

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Socket client serveur
    Par ppphil dans le forum C#
    Réponses: 1
    Dernier message: 08/09/2007, 10h57
  2. [C] Probleme avec socket client-serveur TCP
    Par LinuxUser dans le forum Réseau
    Réponses: 33
    Dernier message: 15/05/2007, 22h26
  3. [socket] client/serveur multi-thred
    Par iag_1980 dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 03/03/2007, 15h38
  4. socket client serveur
    Par idino dans le forum Réseau
    Réponses: 3
    Dernier message: 29/01/2007, 14h45
  5. Socket client serveur
    Par rhdjml dans le forum Langage
    Réponses: 2
    Dernier message: 08/03/2006, 12h09

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