Seite 1 von 1

Datei verschicken -> Vorgehensweise

Verfasst: 14. Dezember 2008 12:40
von speed04
hallo,

wenn ich ein datenpaket versenden möchte, dann muss ich es doch zuerst mit QFile einlesen, dann mit QBuffer puffern um es dann in den QByteArray zu schreiben. ist dem so oder muss noch irgendwie nen zwischenschritt passieren?

thx

Verfasst: 14. Dezember 2008 13:35
von upsala
QFile kann auch diret ein QByteArray zurückgeben...

Verfasst: 14. Dezember 2008 13:53
von speed04
achso okay. das funktioniert ja gut.

so sieht mein codeschnipsel aus:

Code: Alles auswählen

void sender::dateiversand()
{
	QString pfad("c://projects//paket.rar");	
	QByteArray array;
	array = QFile::encodeName(pfad);

       QHostAddress ipv4;
	ipv4 = "192.168.1.2";	//Ziel-IP
	udpsocket -> writeDatagram(array, ipv4, 65001);
}
wenn ich nun mit wireshark den netzwerkverkehr aufzeichne, stelle ich fest, dass er überhaupt nichts rausschickt. bei udp müsste er es doch rausschicken, egal wer der empfänger ist.

oder fehlt noch etwas entscheidendes?

gleich mal noch ne frage im anschluss daran, hat schon mal jemand erfahrung mit dem dateiversand über Qt gemacht? speziell würde mich da die übertragungsgeschwindigkeit interessieren, also kann man seine bandbreite vom netzwerk voll ausschöpfen oder begrenzt Qt in irgendeiner hinsicht?

thx

Verfasst: 14. Dezember 2008 21:24
von Termy
Also ich hab schon mit der QFtp Klasse gearbeitet und die nutzt die Netzwerkgeschwindigkeit voll aus, also kann man davon ausgehen, dass es die restlichen auch tun..

Zu deinem Problem:Probier mal statt ipv4 das hier zu nehmen:

Code: Alles auswählen

QHostAdress("192.168.1.2")
Greetz

Verfasst: 14. Dezember 2008 22:18
von speed04
mh okay danke für die information.

ich hatte noch nen fehler im connect befehl deswegen konnte ich das im wireshark nicht sehen. jetzt kann ich mein udp paket sehen.
aber ich glaube noch nicht genau zu wissen, wie man eine datei von zum beipiel 100mb größe überträgt. wenn ich das mit qdatastream versuche, dann versendet er immer nur den pfad. :-(

Verfasst: 18. Dezember 2008 08:19
von CaptnChaos
du ließt die Datei squenziell aus. sagen wir du überträgst pro paket 16kb. Dann ließt du aus der Datei diese 16kb aus, verschickst sie per Socket und liesst dann die nächsten 16kb aus. Bis QFile atEnd() zurückliefert. Natürlich solltest du in dem Datagram auch noch informationen mitliefern(aktuelle paketnummer, anzahl pakete, größe des pakets). Wegen der größe solltest du aber nochmal schauen. ich weiss nicht was optimal für ein udp datagram wäre.