Große dateien über HTTP und SendNetworkdata()

Für allgemeine Fragen zur Programmierung mit PureBasic.
computerfreak
Beiträge: 112
Registriert: 23.07.2012 19:19

Große dateien über HTTP und SendNetworkdata()

Beitrag von computerfreak »

Moin,
Ich habe folgendes Problem. Für eine Heimnetzwerkanwendung
nutze ich einen HTTP server , dessen Grundgerüst der AtomicWebServer
bildet ( aus den examples)
Allerdings gibt es ein Problem wenn ich zu große Dateien (Bilder von der Digicam)
senden will, dann werden nur halbe bilder im Firefox angezeigt.
liegt wahrscheinlich daran , dass es bei sendNeworkData() eine Begrenzung gibt.

Also muss ich die Datei in Stücke teilen und dann stück für stück senden. Nur wie ?
braucht jedes "stück" einen requestheader ?

hoffe ihr wisst was ich meine !

Danke an jeden der Antwortet
euer Computerfreak :D
PureBasic: Immer das neueste
Windows 8.1 / AMD FX 6100 / R9280X / 8GB RAM
Macbook Pro 2015 Retina
Dell Inspiron 1720 mit Linux Mint
...Und diverse Kleinstcomputer
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8838
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Große dateien über HTTP und SendNetworkdata()

Beitrag von NicTheQuick »

Wenn du statt 'SendNetworkData()' die folgende Procedure nutzt, dann wird sicher gestellt, dass alles übertragen wird. In dem Fall kriegst du als Rückgabewert #True. Gab es einen Fehler, kriegst du als Rückgabewert #False. Alles weitere steht in den Kommentaren. In der Hilfe zu 'SendNetworkData()' steht auch noch einiges, genauer gesagt beim Rückgabewert. Das selbe "Problem" wie hier, gibt es auch bei 'ReceiveNetworkData()', falls du das nutzt.

Code: Alles auswählen

Procedure.i SendNetworkDataEx(ClientID.i, *MemoryBuffer, Length.i)
	Protected sent.i, sentTotal.i = 0
	While Not sentTotal = Length
		;Versuche alles am Stück zu senden, was noch nicht versandt wurde.
		;Speichere in 'sent' wie viele Daten tatsächlich versandt wurden.
		sent = SendNetworkData(ClientID, *MemoryBuffer + sentTotal, Length - sentTotal)
		
		;War das Ergebnis gleich -1, dann konnte nichts gesendet werden (siehe Hilfe).
		;In dem Fall brich die Übertragung komplett ab und gib #False zurück.
		If sent = -1
			ProcedureReturn #False
		EndIf
		
		;Addiere das soeben versandte zur Gesamtübertragungslänge
		sentTotal + sent
	Wend
	ProcedureReturn #True
EndProcedure
///Edit:
Code das zweite mal korrigiert.
computerfreak
Beiträge: 112
Registriert: 23.07.2012 19:19

Re: Große dateien über HTTP und SendNetworkdata()

Beitrag von computerfreak »

Vielen Dank !!
Werds testen und melde mich dann.
:D
PureBasic: Immer das neueste
Windows 8.1 / AMD FX 6100 / R9280X / 8GB RAM
Macbook Pro 2015 Retina
Dell Inspiron 1720 mit Linux Mint
...Und diverse Kleinstcomputer
computerfreak
Beiträge: 112
Registriert: 23.07.2012 19:19

Re: Große dateien über HTTP und SendNetworkdata()

Beitrag von computerfreak »

Danke für Die Hilfe !... Aber mit deinem Code gehts leider garnicht mehr :freak:
aber an der Idee kann ich weiterbauen !



P.S der Server läuft auf Linux

Über weitere Vorschläge freue ich mich

Computerfreak
PureBasic: Immer das neueste
Windows 8.1 / AMD FX 6100 / R9280X / 8GB RAM
Macbook Pro 2015 Retina
Dell Inspiron 1720 mit Linux Mint
...Und diverse Kleinstcomputer
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8838
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Große dateien über HTTP und SendNetworkdata()

Beitrag von NicTheQuick »

Stimmt, ich hatte einen Fehler drin. Hab ihn oben korrigiert. /:->
computerfreak
Beiträge: 112
Registriert: 23.07.2012 19:19

Re: Große dateien über HTTP und SendNetworkdata()

Beitrag von computerfreak »

müsste es nicht heißen

Code: Alles auswählen

While NOT sentTotal = Length
sonst wird ja sofort abgebrochen weil sentTolal ja am anfang 0 ist , Length aber nicht ??? oder übersehe ich was ??


geht immer noch nicht , auch geändert :freak:
PureBasic: Immer das neueste
Windows 8.1 / AMD FX 6100 / R9280X / 8GB RAM
Macbook Pro 2015 Retina
Dell Inspiron 1720 mit Linux Mint
...Und diverse Kleinstcomputer
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8838
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Große dateien über HTTP und SendNetworkdata()

Beitrag von NicTheQuick »

Doch, natürlich. War wohl doch zu viel Feierei gestern. Das wirkt sich noch auf heute aus. :freak:
computerfreak
Beiträge: 112
Registriert: 23.07.2012 19:19

Re: Große dateien über HTTP und SendNetworkdata()

Beitrag von computerfreak »

aber warum gehts bei mir nicht ? Bilder werden immer noch nur halb geladen !
Vor dem Problem sitz ich schon ehhhhwig

Trotzdem danke für die Mühe ...
PureBasic: Immer das neueste
Windows 8.1 / AMD FX 6100 / R9280X / 8GB RAM
Macbook Pro 2015 Retina
Dell Inspiron 1720 mit Linux Mint
...Und diverse Kleinstcomputer
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Große dateien über HTTP und SendNetworkdata()

Beitrag von ts-soft »

Code: Alles auswählen

While sentTotal < Length
Nicht getested, aber irgendwie logisch :wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
computerfreak
Beiträge: 112
Registriert: 23.07.2012 19:19

Re: Große dateien über HTTP und SendNetworkdata()

Beitrag von computerfreak »

sehe ich das richtig ?

Buffer : XXXXXXXXXXXXXXXXX

wenn etwas gesendet wurde vorne wegnehmen

Buffer : XXXXXXXXXXXX

und Länge verkürzen
aber wie nimmt man beim buffer vorne was mit ner bestimmten länge weg ??
PureBasic: Immer das neueste
Windows 8.1 / AMD FX 6100 / R9280X / 8GB RAM
Macbook Pro 2015 Retina
Dell Inspiron 1720 mit Linux Mint
...Und diverse Kleinstcomputer
Antworten