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 :

[Débutant] ServerSocket attend trop longtemps


Sujet :

Entrée/Sortie Java

  1. #1
    Membre du Club
    Inscrit en
    Mars 2002
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 66
    Points : 59
    Points
    59
    Par défaut [Débutant] ServerSocket attend trop longtemps
    Bonjours, c'est ma première tentative client-serveur et mon premier test ne fonctionne pas du tout...

    Premièrement, le client (le strict minimum):

    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
    public static void main(String[] args) {
            try{
                Socket client = new Socket("127.0.0.1", 6666);
                ObjectOutputStream streamOut = new ObjectOutputStream(new DataOutputStream(new BufferedOutputStream(client.getOutputStream())));
                ObjectInputStream streamIn = new ObjectInputStream(new DataInputStream(client.getInputStream()));
                
                streamOut.writeUTF("HEY CA MARCHE!!!!");
                streamOut.writeUTF("Ca Marche encore!!");
                streamOut.writeUTF("Ca Marche encore et toujours!!!!");
                
                
            }catch(Exception e){
                System.out.println(e.getMessage());
            }
        }


    et puis le serveur (le strict minimum):


    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
    public static Vector clients;
    public static ServerSocket server;
    public static boolean fin = false;
    
    
    public static void main(String[] args) {
            Socket client = null;
            clients = new Vector();
            
            try{
              server = new ServerSocket(6666);
              server.setSoTimeout(1000);
            }catch(Exception ioe){
                System.out.println(ioe.getMessage());
            }
              
              while(!fin){
                  try{
                  client = server.accept();
                  }catch(IOException exc){
                      System.out.println("Attente...");
                  }
                  if(client != null){
                    clients.add(new CommunicationClient(client));
                    client = null;
                  }
              }
                
            
        }
    Mon problème est le suivant. Le serveur s'arrête sur client = serveur.accept(); comme prévu. Parcontre, quand le client arrive à Socket client = new Socket("127.0.0.1", 6666);, le serveur ne recoit toujours pas sa connection! Le client continue donc son code et envoie son texte dans le vide. Une fois le code du client terminé (le client est donc fermé) le serveur continue finalement sur la ligne suivante, qui ajoute le client dans sa liste. Malheureusement, à se moment il est trop tard car le client est déjà fermé. Pourquoi le serveur ne voit-il pas le client quand celui-ci créé son Socket?

  2. #2
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 335
    Points : 524
    Points
    524
    Par défaut
    tu as un bufferedOutputStream, alors tu oublie peut-être tout simplement de flusher

    Tu peux essayer d'envoyer des caractères plutots que des objetcs, ce sera plus simple à débugger (notamment se connecter au serveur directement par Telnet)

    sinon, je ne sais pas par quoi je commencerai un projet client-serveur, mais je regarderai un peu du côté de Corba, RMI, voire du WSDL pour faire des serveurs un peu costauds

  3. #3
    Membre du Club
    Inscrit en
    Mars 2002
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 66
    Points : 59
    Points
    59
    Par défaut
    Citation Envoyé par deltree Voir le message
    tu as un bufferedOutputStream, alors tu oublie peut-être tout simplement de flusher

    Tu peux essayer d'envoyer des caractères plutots que des objetcs, ce sera plus simple à débugger (notamment se connecter au serveur directement par Telnet)

    sinon, je ne sais pas par quoi je commencerai un projet client-serveur, mais je regarderai un peu du côté de Corba, RMI, voire du WSDL pour faire des serveurs un peu costauds
    J'ai changé mes ObjectXXputStream pour des DataXXputStream mais ca ne change rien. Le flush non plus, il passe dessus et continue jusqu'a la fermeture du client pour passer à la ligne suivante du serveur.

  4. #4
    Membre du Club
    Inscrit en
    Mars 2002
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 66
    Points : 59
    Points
    59
    Par défaut
    J'ai trouvé...
    Tout fonctionnait comme supposé, c'est juste que le débogueur ne semble pas fonctionner avec 2 projets en même temps. (client + serveur)

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

Discussions similaires

  1. Débutant, problème tableaux trop grands, mémoire
    Par Sabrina0021 dans le forum C
    Réponses: 2
    Dernier message: 24/07/2011, 00h26
  2. Réponses: 2
    Dernier message: 13/02/2009, 17h59
  3. [Cookies] Ma session dure trop longtemps
    Par fofovi72 dans le forum Langage
    Réponses: 5
    Dernier message: 17/08/2007, 20h28
  4. Gérer une action qui dure trop longtemps
    Par galicleo dans le forum VB.NET
    Réponses: 3
    Dernier message: 19/01/2007, 16h35
  5. [débutant mais pas trop] conversion string->entier
    Par Biosox dans le forum Débuter
    Réponses: 5
    Dernier message: 06/01/2006, 22h41

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