QHttp Downloads in mehreren Threads gleichzeitig

Alles zum Qt Framework für Java
Antworten
voka
Beiträge: 4
Registriert: 12. Januar 2008 10:23

QHttp Downloads in mehreren Threads gleichzeitig

Beitrag von voka »

Hallo,

ich bin das erste Mal in einem Forum. Falls was daneben geht, sorry.

Nun aber zu meinem Problem. Ich versuche mit mehreren Ableitungen in unterschiedlichen Threads über GET gleichzeitig mehrere Dateien zu laden. Einzeln nacheinander - kein Problem. Leider kommen immer Fehlermeldungen, die darauf hinweisen, dass ein mehrfacher Download gleichzeitig nicht möglich ist. Ich habe auch mit Google usw. nichts darüber gefunden. Sollte jemand einen Ansatz haben, bitte ich um ein Codebeispiel.
Vielen Dank im Voraus!
Voka

Ich zeige hier mal meinen bisherigen Versuch, der nicht klappt. Starte ich das Programm ohne den run- Methoden, funktioniert es. Was mache ich falsch?

package testHTTP;

import com.trolltech.qt.QThread;
import com.trolltech.qt.gui.QApplication;

public class HoleListen {

/** Programm soll später den Downloadstatus anzeigen und dabei bedienbar bleiben
* Es startet einen Thread, der dann nach Fertigwerden eines Downloads die weitere
* Verarbeitung übernehmen soll. */
protected HoleListen() {
Thread thread= new QThread(new Runnable() {
public void run() {
beginne();
}
});
thread.start();
}

public void beginne() {
new HTML_HoleListen();
// Hier soll dann die Synchronisation mit den einzelnen Downloadprozessen
// und die Weiterverarbeitung erfolgen
}

/** @param args */
public static void main(String[] args) {
QApplication.initialize(args);

new HoleListen();
QApplication.exec();
}
}
___________________________________________________
package testHTTP;

import com.trolltech.qt.QThread;

class HTML_HoleListen {
private QFile file;
private int httpGetId;
private QHttp http;
private boolean httpRequestAborted;

/** Hier sollen mehrere Downloads gleichzeitig starten. Z.Z. ist es nur einer,
* aber nicht mal der funktioniert */
public HTML_HoleListen() {
Thread thread= new QThread(new Runnable() {
public void run() {
beginne();
}
});
thread.start();
}

public void beginne() {
QHttpRequestHeader header= new QHttpRequestHeader(
"GET", "/tools/boerse/kurse_indizes.htm?&s=846900&b=9&l=276XETRA");
header.setValue("Host", "www.boerse-online.de");
header.setValue("User-Agent", "Mozilla/5.0 (X11; U; Linux i686; de; rv:1.8.1) Gecko/20061023 SUSE/2.0-30 Firefox/2.0");
header.setValue("Accept",
"text/html, image/jpeg, image/png, text/*, image/*, */*");
header.setValue("Accept-Language", "de, en");
header.setValue("Accept-Encoding", "gzip, deflate"); // Sonst kein gzip
header.setValue("Accept-Charset", "utf-8, utf-8;q=0.5, *;q=0.5");
header.setValue("Keep-Alive", "300");
header.setValue("Connection", "close");
http= new QHttp();
String fileName= ("IndexListe.gzip");
if (QFile.exists(fileName)) {
QFile.remove(fileName);
}
file= new QFile(fileName);
if (!file.open(new QFile.OpenMode(QFile.OpenModeFlag.ReadWrite))) {
System.out.println("fileFehler "+file.errorString());
return;
}

http.requestFinished.connect(this, "httpRequestFinished(int, boolean)");
http.dataReadProgress.connect(this, "updateDataReadProgress(int,int)");
http.responseHeaderReceived.connect(this,
"readResponseHeader(QHttpResponseHeader)");
http.readyRead.connect(this, "httpReadyRead(QHttpResponseHeader)");
http.done.connect(this, "downloadDone(boolean)");
http.stateChanged.connect(this, "httpStateChanged(int)");

http.setHost("www.boerse-online.de", 80);
httpRequestAborted= false;
httpGetId = http.request(header);
System.out.println("IndexListe gestartet");
}

@SuppressWarnings("unused")
private void httpReadyRead(QHttpResponseHeader rsp) {
System.out.println("-------------> httpReadyRead");
}

@SuppressWarnings("unused")
private void httpRequestFinished(int requestId, boolean error) {
System.out.println("httpRequestFinished "+ requestId+ " "+ http.errorString());
if (requestId != httpGetId) {
return;
}
if (httpRequestAborted) {
if (file != null) {
file.close();
file.remove();
file = null;
}
return;
}

if (error) {
file.remove();
QMessageBox.information(null, "HTTP",
"Download failed " + http.errorString());
} else {
System.out.println("datei speichern");
QByteArray buffer= http.readAll();
file.write(buffer);
file.flush();
file.close();
}
file = null;
}

@SuppressWarnings("unused")
private void readResponseHeader(QHttpResponseHeader responseHeader) {
System.out.println("readResponseHeader");
if (responseHeader.statusCode() != 200) {
QMessageBox.information(null, "HTTP","Download failed: "
+responseHeader.reasonPhrase());
httpRequestAborted = true;
} else { // Header ist OK, also ausgeben auf Console
System.out.println("statusCode "+ responseHeader.statusCode());
}
}

@SuppressWarnings("unused")
private void updateDataReadProgress(int bytesRead, int totalBytes) {
System.out.println("updateDataReadProgress "+ bytesRead+ " Bytes gelesen");
}

@SuppressWarnings("unused")
private void downloadDone(boolean done) {
System.out.println("done"+ done);
http.close();
}

@SuppressWarnings("unused")
private void httpStateChanged(int i) {
System.out.println("state Changed "+ i);
}
}

Einzige Ausgaben sind:
IndexListe gestartet
httpRequestFinished 1 Unknown error
state Changed 2

Die Datei bleibt aber leer!
Für eure Hilfe wäre ich sehr Dankbar!
Antworten