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 :

Serveur HTTP, second réponse non renvoyée


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2
    Par défaut Serveur HTTP, second réponse non renvoyée
    Bonjour,
    Je développe actuellement un serveur HTTP, et je rencontre un problème étrange. Lorsque j'envoie ma première requête, le serveur répond bien et la réponse s'affiche dans mon browser (IE ou FireFox). Par contre, si je relance la requête (Ctrl+R) la réponse n'arrive jamais au client. IE affiche sa page serveur indispo et Firefox me dit que la connexion a été interrompu avant la réception du message.
    J'ai essayer de faire un cache côté serveur, histoire de ne pas refaire tout le traitement mais renvoyer directement la réponse si la requête m'est déjà parvenu, mais la encore la seconde requête n'aboutit pas. Le plus bizarre c'est que si je met un breakpoint (Eclipse) en DEBUG avant l'appelle de la fonction qui écrit sur la socket alors la réponse parvient au client.

    Voici une partie du code de mon serveur:

    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
     
    public void listen() {		
             while (true) {
    	try {
    	      socket.add(server.accept());
    	      System.out.println("\nConnexion sur le serveur "+this.id+": " + socket.lastElement());
    	      // Récupération des flux d'entrés et de sortie
                      InputStream  fluxEntree = ((Socket)socket.lastElement()).getInputStream ();
    	     char caractereLu;
    	     String stringLu="";			    
    	     while ((caractereLu = (char)fluxEntree.read ()) != '\n') {
    	               stringLu+=caractereLu;			      
    	      }
    	      this.objet.parse(stringLu, ((Socket)socket.lastElement()));
    	}
    	catch (IOException e){
    	      System.out.println ("Serveur.listen :Erreur de la methode listen e="+e);
    	}
          }
    }
    En gros, j'ai un pool de socket, et dès que je lit une requet je l'envoie à un thread avec la socket de réponse. C'est ce thread qui envoie la réponse et qui ferme la socket.

    Quelqu'un pourrait me dire ce qui se passe?

  2. #2
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2
    Par défaut précisions
    Je m'aperçois qu'il manque des précisions, notamment sur ce que renvoie le serveur, voila ma fonction de renvoie du cache, mais les autres fonctionnent sur le même modèle:

    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
     
    private boolean returnLastMessage(String url, Socket socket) {
    try {
    	OutputStream os = socket.getOutputStream();
    	OutputStreamWriter osw = new OutputStreamWriter(os);
    	BufferedWriter bw = new BufferedWriter(osw);
    	bw.write("HTTP/1.0 200 OK\r\n");
    	bw.write("Content-Length: "+((String)this.messagesList.get(url)).length()+"\r\n");
    	bw.write("Connection: close\r\n");
    	bw.write("Content-Type: text/xml\r\n");
    	bw.write("\r\n");
    	bw.write(((String)this.messagesList.get(url)));
    	bw.write("\n\n");
    	bw.flush();
    	bw.close();
    	osw.close();
    	os.close();
     
                 this.closeSocket(socket);
    	return true;
    }
    catch (IOException ioe) {
    	System.out.println("Impossible d'écrire dans la socket erreur="+ioe);
    	this.closeSocket(socket);			
    	return false;
    }
    catch (Exception e) {
    	System.out.println("Impossible d'écrire dans la socket erreur="+e);
    	this.closeSocket(socket);			
    	return false;
    }
    }

Discussions similaires

  1. test de non regression sur un serveur http
    Par oudtc dans le forum Autres
    Réponses: 0
    Dernier message: 17/11/2011, 15h36
  2. [AJAX] Réponse non reçue du serveur
    Par rafmos dans le forum AJAX
    Réponses: 12
    Dernier message: 17/08/2011, 14h52
  3. Récupérer la réponse d'un serveur http
    Par dibiz dans le forum Langage
    Réponses: 4
    Dernier message: 19/05/2008, 18h01
  4. Sockets SSL ( serveur HTTPS )
    Par hexadecime dans le forum Réseau/Web
    Réponses: 4
    Dernier message: 19/10/2007, 18h02
  5. [Réseau] Headers vers un serveur http
    Par gexti dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 04/05/2004, 14h58

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