Lire un flux avec readLine puis byte par byte

karine -  
 karine -
Bonjour,

J'ai un problème en java.
Je lis un flux qui me vient d'un serveur web ligne parligne pour l'en-tete.
Puis je lis octet par octet pour la suite.
Mais quand je lis octet par octet, il manque des données entre la fin de l'en-tete et ce que je lis.

Voilà ce que j'ai dans mon terminal :

HTTP/1.1 200 OK
Date: Tue, 03 May 2005 09:54:28 GMT
Server: Apache/1.3.27 (Unix) PHP/4.3.3
X-Powered-By: PHP/4.3.3
Set-Cookie: PHPSESSID=db12b8c8a944e4bcdc6e61627081a86c; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate,
post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: cpp=0; expires=Tue, 03-May-05 08:54:28 GMT
Set-Cookie: cpagem=0-1-0
Transfer-Encoding: chunked
Content-Type: text/html

return false;
}
}
}

Le code de la page html commence n'importe ou, il manque des trucs au debut comme <html> etc...

Voici mon code :
PrintStream sout = new PrintStream(client.getOutputStream());
InputStream entrant = socket.getInputStream();
BufferedReader in = new BufferedReader(new InputStreamReader( entrant ));
String line;
byte [] buffer = new byte[4096];
int lus;

while((line = in.readLine()) != null) {
         if (line.length() == 0) break;
	System.out.println("line" + line);
          sout.println(line);
    }
System.out.println("line" + "");
sout.println("");

while ((lus = entrant.read(buffer)) != -1) {
sout.write(buffer,0,lus);
}


Si quelqu'un peut m'aider, ce serait vraiment sympa car ça fait plus d'une semaine que je suis sur ce bug.

Merci !
A voir également:

2 réponses

Visiteur
 
Bonjour,

As tu essayé de lire uniquemet octet / octet pour voi si tu recois bien toutes les données ?

PrintStream sout = new PrintStream(client.getOutputStream());
InputStream entrant = socket.getInputStream();
//BufferedReader in = new BufferedReader(new InputStreamReader( entrant ));
//String line;
byte [] buffer = new byte[4096];
int lus;

while ((lus = entrant.read(buffer)) != -1) {
System.out.println("recu : " + String.valueOf(buffer));
sout.write(buffer,0,lus);}
0
karine
 
Oui ça marche très bien quand je fais comme ça.

C'est quand je change de façon de lire que ça bug.
0