Seite 1 von 2

Große dateien über HTTP und SendNetworkdata()

Verfasst: 10.02.2013 14:43
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

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

Verfasst: 10.02.2013 15:57
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.

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

Verfasst: 10.02.2013 16:02
von computerfreak
Vielen Dank !!
Werds testen und melde mich dann.
:D

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

Verfasst: 10.02.2013 18:32
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

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

Verfasst: 10.02.2013 19:21
von NicTheQuick
Stimmt, ich hatte einen Fehler drin. Hab ihn oben korrigiert. /:->

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

Verfasst: 10.02.2013 19:32
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:

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

Verfasst: 10.02.2013 19:33
von NicTheQuick
Doch, natürlich. War wohl doch zu viel Feierei gestern. Das wirkt sich noch auf heute aus. :freak:

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

Verfasst: 10.02.2013 19:34
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 ...

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

Verfasst: 10.02.2013 19:35
von ts-soft

Code: Alles auswählen

While sentTotal < Length
Nicht getested, aber irgendwie logisch :wink:

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

Verfasst: 10.02.2013 19:37
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 ??