BufferedReader blockiert zu lange

Status
Nicht offen für weitere Antworten.

Soccertrash

Mitglied
Hallo zusammen,

ich habe mir per Sockets eine HTTP GET Anfrage gebastelt, die auch wunderbar funktioniert.
Leider hängt die Schleife an der Stelle in.readLine() immer, obwohl schon die ganze Response des Servers gelesen wurde. Gibt es irgendein Zeichen, das das Ende einer HTTP Response wider gibt? Ein Webbrowser hängt ja auch nicht so lange... Und mein Programm wartet noch ca 5 bevor es weiter macht, obwohl eben die gesamte Antwort schon da ist :(
Hier mein Code:

Code:
while((line2=reader2.readLine())!=null){
			
			ret+=line2;
				
}

Habe kein soTimeout angegeben.

Thx! [/code]
 
T

tuxedo

Gast
Ich weiß es nicht genau, aber ich tippe mal darauf dass der Webserver die Verbindung noch offen hält und dort das Timeout liegt.

Pack doch das ganze auslesen in einen Thread und lass den dort "zuende warten".

Oder: Eine korrekte HTML Seite sollte doch mit sowas wie "</html>" enden... Mach doch einfach danach ein in.close() ?

Kleiner Tipp: readLine() will immer eine ganze Zeile lesen. Wenn du auf read() umsteigst bist du da etwas flexibler und es wird noch immer blockiert bis ein Zeilenende detektiert wird.

- Alex
 

Murray

Top Contributor
Beim HTTP-Protokoll können auch mehrere Request/Response-Kombinationen nacheinander über die gleiche Connection übertragen werden; man sollte also nicht unbedingt erwarten, dass der Server die Verbindung nach dem ersten Response abbricht (das Verhalten sollte man aber erzwingen können, wenn als Client im HTTP-Header "Connection: close" mitgibt).
Wenn der Server im Response-Header das Feld "Content-Length" füllt, dann kann man so vorgehen:
1. Den Response-Header zeilenweise lesen (also solange zeilenweise lesen, bis eine Leerzeile kommt)
2. Dann im Header nach der Zeile mit "Content-Length" suchen und den Wert auswerten
3. Dann genau so viele Zeichen lesen, wie lt. Server kommen sollen
 

Soccertrash

Mitglied
Also ich übergeb jetzt bei der Anfrage bei keep-alive den Wert 0 und bei Connection den Wert close und nun gehts viel schneller :) Der Tipp mit Zeichenauslesen ist auch gut, nur wird der Wert nicht bei allen Anfragen mit übergeben... Und auf das schließende HTML kann man sich nicht verlassen, da ich z. B. auch AJAX Requests versende, in denen nur ein Stück "HTML" ist :)
Danke für die Tipps!!!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Socket BufferedReader.read(char[] buffer) blockiert unregelmäßig Netzwerkprogrammierung 3
A Socket BufferedReader.readLine() blockiert bis ein im Socket OutputStream was gesendet wird ... Netzwerkprogrammierung 9
M HTTP URLConnection + BufferedReader killt meine Umlaute Netzwerkprogrammierung 4
x46 byte[] über BufferedReader auslesen Netzwerkprogrammierung 18
X Socket [Anfänger] BufferedReader.readLine() lässt sich Zeit Netzwerkprogrammierung 1
B Socket BufferedReader.readLine() beenden ohne den Stream zu closen Netzwerkprogrammierung 7
J BufferedReader.ready() wird nicht true Netzwerkprogrammierung 10
V Socket BufferedReader interrupten? Netzwerkprogrammierung 10
B Multi-Threaded block bei BufferedReader.readLine() Netzwerkprogrammierung 8
P eine BufferedReader für alles ankommende Netzwerkprogrammierung 2
C 2 BufferedReader als Listener pro Socket (NICHT) möglich? Netzwerkprogrammierung 2
E BufferedReader.ready() immer false Netzwerkprogrammierung 8
R Mittels BufferedReader Objekte lesen? Netzwerkprogrammierung 5
AlClemento Sockets -> BufferedReader Problem Netzwerkprogrammierung 2
C Kollision von ObjectInputStream und BufferedReader ? Netzwerkprogrammierung 6
O BufferedReader.readline kommt nicht zurück Netzwerkprogrammierung 7
F BufferedReader Socket Netzwerkprogrammierung 2
B BufferedReader.readLine() ließt nicht vollständig ! ? Netzwerkprogrammierung 5
J Vom BufferedReader lesen -> hängt ohne Fehler,ohne Except Netzwerkprogrammierung 2
Z Socket UDP Unicast blockiert wenn Ziel offline Netzwerkprogrammierung 1
F Socket new Socket() blockiert Netzwerkprogrammierung 3
J readline blockiert? Netzwerkprogrammierung 9
G Socket.getInputStream().available() blockiert Oberfläche! Netzwerkprogrammierung 2
S JApplet dauert lange Netzwerkprogrammierung 14
S RMI Polling oder lange Verbindungen Netzwerkprogrammierung 6
X Versenden von Objekten braucht zu lange Netzwerkprogrammierung 5
A Lange wartezeit bei Netzwerkzugriff... Netzwerkprogrammierung 5
D Lange Zeilen in Emails werden umgebrochen Netzwerkprogrammierung 2
B lange Strings in http-Request? Netzwerkprogrammierung 3
M lange Strings senden Netzwerkprogrammierung 16

Ähnliche Java Themen

Neue Themen


Oben