Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   JPEG über Socket an Browser senden (https://www.delphipraxis.net/161231-jpeg-ueber-socket-browser-senden.html)

DirkG 23. Jun 2011 14:44

JPEG über Socket an Browser senden
 
Hallo!
Die Suchfunktion hat leider nicht den gewünschten Erfolg gebracht, darum will ich es mal als Frage versuchen.

Ich habe einen kleinen WEB-Server. Dieser soll 4-5 Seiten bereitstellen, die im Intranet abgeholt werden können. Das senden einer HTML Seite funktioniert. Nur wenn in der Seite eine Grafik enthalten ist, kommt es zu Problemen. Der Browser empfängt die Seite, fordert die Stylesheet Datei an und empfängt sie problemlos. Dann fordert er die Grafik an. Der Server kann die Datei laden und beginnt sie zu senden. Dann passiert nichts mehr. Ich verwende die folgenden Zeilen zum Senden der Datei.

Delphi-Quellcode:
var lvSize: integer;
    lvMemStream: TMemoryStream;

...

  lvMemStream:= TMemoryStream.Create;
  try
    lvMemStream.LoadFromFile(aFileName);
    lvMemStream.Seek(0, soFromBeginning);
    lvSize:= lvMemStream.Size;
    fSocket.SendBuf(lvSize, Sizeof(lvSize));
    fSocket.SendStream(lvMemStream);
    Sleep(100);
  finally
    lvMemStream.Free;
  end;

Klaus01 23. Jun 2011 14:53

AW: JPEG über Socket an Browser senden
 
Hallo,

sollte bei SendBuf nicht als Parameter der Buffer und die Größe des Buffers stehen?
ahh -da überträgst Du "nur" die Größe der Bilddatei.

Arbeiten SendBuf und SendStream blockierend?
Die Übertragung, ist die nach 100ms fertig?

Grüße
Klaus

DeddyH 23. Jun 2011 15:51

AW: JPEG über Socket an Browser senden
 
[del] Sry, nicht richtig gelesen

sirius 23. Jun 2011 18:24

AW: JPEG über Socket an Browser senden
 
Kann es sein, dass dir komplett der http-Header fehlt?
Du musst in etwa folgendes senden(der erste Teil ist reiner Text mit dem Windows-Zeilenendezeichen (#13#10):
Code:
HTTP/1.1 200 OK
Server: most important Server written in Delphi
Content-Language: de
Content-Type: image/jpeg
Content-Length: [i]hier Anzahl Bytes des Bildes als Text eintragen[/i]
Connection: keep-alive
nach dem Header muss zwingend eine Leerzeile folgen und dann sendest du einfach das Bild (als Stream) hinterher.

Ich frage mich nur, wie das bisher geklappt hat.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz