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 :

[Threads et TCP] Eclaircissement


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de Tuxico
    Profil pro
    Étudiant
    Inscrit en
    Août 2003
    Messages
    662
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2003
    Messages : 662
    Par défaut [Threads et TCP] Eclaircissement
    Bonjour à tous,

    voici le problème, je dois avoir un Client TCP et un serveur TCP tournant sur la même machine (pour du partage de fichier sans rentrer dans les détails), chaque noeud du partage sera donc client et serveur. Seulement voilà je m'y perds un peu au niveau de threads. Je vous donne un exemple:

    Mon serveur tcp (basique):

    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
    package PFIL.PartageServeur;
     
    import java.io.*;
    import java.net.*;
    import PFIL.CarnetAdresses.XmlReader;
    import PFIL.PartageClient.TCPClient;
     
    /**
     *
     * @author Benats Guillaume
     *         Roland Charles
     **/
     
    public class TCPServer {
    //OVERVIEW: Gestion du serveur de partage
     
            public TCPServer(){
     
                ThreadTCP servOn = new ThreadTCP();
                servOn.run();
            }
     
    	private class ThreadTCP extends Thread{
            //REQUIRES: /
            //MODIFIES: /
            //EFFECTS: Lance un nouveau thread pour le serveur TCP
     
                public void run(){
                    try{
                        activateServ();
                    }catch(Exception e){
                        e.printStackTrace();
                    }
                }
            };
     
            private static void activateServ() throws Exception{
            //REQUIRES: /
            //MODIFIES: /
            //EFFECTS: Lance le serveur TCP
     
    		String clientSentence;
                    String servSentence;
    		String capitalizedSentence;
    		ServerSocket welcomeSocket = new ServerSocket(6789);
    		while(true) {
    			Socket connectionSocket = welcomeSocket.accept();
    			System.out.println("Prise en charge du client " +
    				connectionSocket.getInetAddress().getHostAddress() + " sur le port " +
    				connectionSocket.getPort() + " de " +
    				InetAddress.getLocalHost().getHostAddress() + " sur le port " +
    				connectionSocket.getLocalPort());
    			BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
    			DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
     
                            servSentence = "Login?";
                            int b = Integer.parseInt(servSentence);
                            outToClient.write(b);
    			clientSentence = inFromClient.readLine();
    			System.out.println("Reçu: " + clientSentence);
                            boolean verif = verifyLogin(clientSentence);
     
                            if(!verif){
                                servSentence = "Utilisateur non reconnu!";
                                b = Integer.parseInt(servSentence);
                                outToClient.write(b);
                                break;
                            }
     
    			capitalizedSentence = clientSentence.toUpperCase() + "\n";
    			outToClient.writeBytes(capitalizedSentence);
    		}
            }
     
            private static boolean verifyLogin(String clLogin){
     
                XmlReader x = new XmlReader();
                String[] t = x.read();
                for(int i = 0; i<t.length; i++){
                    if(t[i].equals(clLogin)){
                        return true;
                    }
                }
                return false;
     
            }
     
    }
    et mon 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
    44
    45
    46
    47
    48
    49
    50
    package PFIL.PartageClient;
     
    import java.io.*;
    import java.net.*;
     
    /**
     * @author Benats Guillaume
     *         Roland Charles 
     **/
     
    public class TCPClient{
     
            public TCPClient(){
     
                ThreadTCP cliOn = new ThreadTCP();
                cliOn.run();
            }
     
    	private class ThreadTCP extends Thread{
            //REQUIRES: /
            //MODIFIES: /
            //EFFECTS: Lance un nouveau thread pour le serveur TCP
     
                public void run(){
                    try{
                        activateCli();
                    }catch(Exception e){
                        e.printStackTrace();
                    }
                }
            };
     
            private static void activateCli() throws Exception{
            //REQUIRES: /
            //MODIFIES: /
            //EFFECTS: Lance le serveur TCP
     
    		String sentence;
    		String modifiedSentence;
    		BufferedReader inFromUser = new BufferedReader( new InputStreamReader(System.in));
    		Socket clientSocket = new Socket("localhost",6789);
    		DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
    		BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
    		sentence = inFromUser.readLine();
    		outToServer.writeBytes(sentence + '\n');
    		modifiedSentence = inFromServer.readLine();
    		System.out.println("Du serveur: " + modifiedSentence);
    		clientSocket.close();
    	}
    }

    Seulement voilà, quand je lance une instance de TCPServer via le run() et la même chose pour le client, les deux thread ne sont pas séparés et le serveur attends une connexion du client en boucle, et forcément tant que cette boucle n'est pas finie, il ne saura pas que le client se connecte juste après..


    Comment faire donc pour que le serveur et le client d'une même machine interragissent?


    un grand merci,

    Guillaume.

  2. #2
    Membre émérite Avatar de Tuxico
    Profil pro
    Étudiant
    Inscrit en
    Août 2003
    Messages
    662
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2003
    Messages : 662
    Par défaut
    c'est réglé merci après un peu plus de lecture de doc sur les Thread

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

Discussions similaires

  1. eclaircissement sur les threads
    Par marocleverness dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 12/07/2009, 10h48
  2. Soucis avec I/O tcp + thread
    Par Bluespear dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 13/10/2008, 17h53
  3. Gestion des threads de communication TCP/IP
    Par Daminus dans le forum Delphi
    Réponses: 6
    Dernier message: 01/12/2006, 13h37
  4. Réponses: 1
    Dernier message: 17/11/2006, 23h21
  5. Sockets TCP/ Threads
    Par guillaume16 dans le forum C++
    Réponses: 3
    Dernier message: 27/07/2006, 23h45

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