Hilfe, meine HttpURLConnection hängt manchmal.

Status
Nicht offen für weitere Antworten.

der_Ben

Mitglied
Um verschiedene Websites via http anzufordern nutze ich folgenden Code:
Code:
    String buffer = "";
    HttpURLConnection myConnection = null;
    URL url = new URL("http://foo.bar:80/index.html");
    myConnection = (HttpURLConnection) url.openConnection();
    myConnection.setRequestMethod("GET");
    myConnection.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; JVM)");
    myConnection.setRequestProperty("Pragma", "no-cache");
    myConnection.setReadTimeout(TIMEOUT);
    myConnection.connect();
    BufferedReader reader = new BufferedReader(
            new InputStreamReader(myConnection.getInputStream()));
    do {
      buffer = reader.readLine();      
      if (buffer != null) {        
        read.append(buffer);
      }
    } while (buffer != null);    
    reader.close();
    myConnection.disconnect();

Meistens ist auch alles gut, aber manchmal hängt das ganze bei
Code:
buffer = reader.readLine();
fest. Aber das dann auch nur manchmal, bei einem zweiten oder dritten Versuch funktioniert die Anfrage wieder.
Habe ich irgendwo Murks eingebaut oder irgendwas nicht beachtet?
 

Tobias

Top Contributor
buffer.readLine() wartet, bis eine Zeile eingelesen ist und gibt diese dann zurück. Wenn der Server aber nichts zurückliefert, wartet der BufferedReader hier ewig, weil nie eine Zeile voll wird.

mpG
Tobias
 

der_Ben

Mitglied
Ja ok, leuchtet ein. Habe deswegen nun Testweise
Code:
buffer = reader.readLine();
gegen
Code:
buffer = String.valueOf((char)reader.read());
ausgetauscht. Nun sehe ich auch, dass ich durchaus etwas empfange, aber dennoch bleibt das ganze wieder an dieser Stelle hängen, bevor die HTML Seite komplett übertragen ist. Gibts es da noch etwas zu beachten?
 

Tobias

Top Contributor
Naja, der BufferedReader muß ja auf irgendein Zeichen warten, dass ihm sagt, dass die Zeile voll ist - wahrscheinlich ein Zeilenumbruch. Kommt sowas auch an?

mpG
Tobias
 

Murray

Top Contributor
Versuch mal, die Verwendung persistenter Connections abzuschalten:

Code:
myConnection.setRequestProperty("Connection", "close");

Hintergrund: Mit HTTP 1.1 wird die Connection normalerweise nach einem Response nicht geschlossen, sondern kann für den nächsten Request benutzt werden. Daher wird man beim Lesen des Response-Streams auch nicht null erhalten; die (blockierende) read-Methode wartet vielmehr auf die nächste Antwort (die aber niemals kommt). Schließt der Server die Verbindung aber, sobald er den Response komplett geschrieben hat, dann liefert die read-Methode wirklich wie hier erwartet null zurück.
 
G

Guest

Gast
Danke, danke... meine HttpURLConnection und ich vertragen uns derweil auch wieder. :lol:

Aber diesbezüglich habe ich da noch eine Frage:
Wie viele HttpURLConnection kann man eigentlich bedenkenlos in eigenen Threads "gleichzeitig" starten ohne die heimischen Internetleitung zu überlasten?!


MfG
der Ben
 
T

tuxedo

Gast
Das kommt doch stark auf

a) die Internetverbindung
und
b) die größe der Webseite an.

Überleg dir einfach wieviele Webseiten du im Browser deiner Wahl gleichzeitig öffnen kannst ohne dass die Leitung qualmt.

Bei heutigen DSL-Anschlüssen dürften das _wirklich_ viele Seiten gleichzeitig sein. Denke du brauchst dir da keine große Gedanken zu machen. Außer du willst 100 oder mehr Seiten laden.

- Alex
 

der_Ben

Mitglied
Hmm... also manchmal könnten es schon 100 sein, u.U. auch mal 500 oder 1000... daher ja meine Nachfrage, um einen Wert zu finden auf wieviele gleichzeitige Threads ich das begrenzen sollte...
 
T

tuxedo

Gast
Man muss dazu sagen, dass Windows die Anzahl der gleichzeitigen TCP-Verbindungen auf glaub 10 Stück beschränkt (hatten wir schon mindestens 2 mal in diesem Forum, musst du mal suchen).

Solange du das nicht änderst kannstz du auch 10 Millionen Threads starten (sofern es dein Speicher zulässt).

Eine fixe Zahl wie "Mit DSL6000 kann man 100 Webseitebn gleichzeitig runterladen" lässt sich nicht festlegen. Wenn's nur Textseiten, ohne Grafiken sind und der Webserver gzip unterstützt, kannst du viel mehr runterladen als wenn du nur Webseiten hast die Bilder in der Größe von 11MegaPixel anbietet.

In meinem FTP-Programm hab ich (benutze DSL6000) nicht mehr als 15 oder 20 Verbindungen gleichzeitig. Irgendwann machts auch keinen Sinn noch mehr einzustellen da die Bandbreite mit jedem neuen Thread wieder ein Stück weniger wird. Und irgendwann wirds so wenig dass es unter Umständen zu einem Timeout kommt.

Würde irgendwas zwischen 5 und 25 nehmen, abhängig von der verfügbaren Download-Bandbreite. Ist aber nur so ein "pi-mal-Daumen" Maß...

- Alex
 

der_Ben

Mitglied
Ok, danke...


P.S.: es handelt sich übrigens um eine Webcrawler Applikation, die in sehr kurzen Intervallen sehr up-to-date sein soll. Bei allen Verbindungen werden meist nur kleine Textdateien in der Größenordnung von 150 bis 350 Byte gelesen.
Also keine Angst haben: Du hast mir keine Tips für 'nen bösartigen Spam-Bot gegeben :!:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Objekt mit RSA und AES verschlüsseln und entschlüsseln HILFE Netzwerkprogrammierung 4
T Brauche Hilfe beim GET-String für HttpURLConnection Netzwerkprogrammierung 4
platofan23 Socket Hilfe mit Socket Thread und ArrayList Netzwerkprogrammierung 6
V Kann man mit Hilfe eines Java-Programms den Zugriff auf bestimmte Internetseiten verhinden? Netzwerkprogrammierung 3
C JSON, API ... Anfänger braucht eure Hilfe Netzwerkprogrammierung 10
KingSquizzi3 Website parsen mit Hilfe von jsoup funktioniert nicht Netzwerkprogrammierung 3
J Hilfe beim programmiern einer App zur Anmeldung im Wlan-Netzwerk Netzwerkprogrammierung 0
B JKS erstellen bitte um hilfe Netzwerkprogrammierung 1
R Hilfe bei FTP Netzwerkprogrammierung 7
D HTTP Bräuchte hilfe mit Http Requests Netzwerkprogrammierung 6
R Benötige Hilfe bei Routereinstellungen Netzwerkprogrammierung 7
E RMI RMI - Brauche Hilfe? Netzwerkprogrammierung 7
xDarkSunx Hilfe Chat Login Netzwerkprogrammierung 7
K Datenübertragung UDP Hilfe ????? Netzwerkprogrammierung 5
H Hilfe bei multiplen Clients Netzwerkprogrammierung 7
N Client - Server kurze Hilfe bitte Netzwerkprogrammierung 2
T IP Adresse mit Hilfe der MAC Adresse ermitteln Netzwerkprogrammierung 3
D Hilfe ich komme bei meinem UDP chat Server nicht mehr weiter Netzwerkprogrammierung 9
eQui Hilfe bei Chatprogramm Netzwerkprogrammierung 3
J Brauche hilfe bei Projekt: Netzwerk Chatprogramm Netzwerkprogrammierung 12
TRunKX Hilfe beim senden und empfangen Netzwerkprogrammierung 2
André B. Brauche Hilfe bei Chat Netzwerkprogrammierung 6
D Netzwerk Game, bitte hilfe. Netzwerkprogrammierung 2
N JMS Newbie braucht hilfe Netzwerkprogrammierung 6
S Noob braucht dringend hilfe bei ftp-client Netzwerkprogrammierung 2
M HTTP URLConnection + BufferedReader killt meine Umlaute Netzwerkprogrammierung 4
Ollek Socket Sucher passende Server/Client Lösung für meine Anwendung Netzwerkprogrammierung 2
D ...class.getResourceAsStream("/meine.properties") funktioniert nicht über RMI? Netzwerkprogrammierung 3
E noob: wie kann ich meine netzwerkapp. testen? Netzwerkprogrammierung 3
P RMI - meine Stub-Class wird nicht gefunden Netzwerkprogrammierung 9
E HttpUrlConnection Cookie Problem Netzwerkprogrammierung 0
V Unterschied zwischen cURL und HttpURLConnection?? Netzwerkprogrammierung 2
E HTTP HttpURLConnection & Javascript Netzwerkprogrammierung 2
A HTTP HttpURLConnection wiederverwenden? Netzwerkprogrammierung 2
T HttpURLConnection Netzwerkprogrammierung 6
T Ladezeit einer Seite mit HttpURLConnection und Bildern Netzwerkprogrammierung 2
J HttpURLConnection ResponseCode 403 Netzwerkprogrammierung 2
R HTTP HttpURLConnection Large File Upload Netzwerkprogrammierung 1
S HttpURLConnection POST splittet Daten in zwei Pakete Netzwerkprogrammierung 9
M HttpURLConnection und Proxy Netzwerkprogrammierung 2
F HttpURLConnection überschreiben Netzwerkprogrammierung 2
W Problem mit HttpURLConnection Netzwerkprogrammierung 2
W HttpURLConnection-Wikipedia Netzwerkprogrammierung 15
E Multi-Part Form-Daten mit HttpURLConnection Netzwerkprogrammierung 6
M HttpUrlConnection + Client/Server Problem Netzwerkprogrammierung 2
X mehrere Request über eine HttpURLConnection Netzwerkprogrammierung 2
S Probleme mit HttpURLConnection Netzwerkprogrammierung 10
G Redirects einer HttpURLConnection ermitteln Netzwerkprogrammierung 4

Ähnliche Java Themen

Neue Themen


Oben