Hi leute
Bin gerade dabei einen HTTP Server zu schreiben wenn auch nur in abgespeckter Version! Programmiersprache VB5.0
Bisher funktioniert dies soweit! Ich bekomme nur probleme dabei weinn der Browser bilder anfordert! und zwar weiss ich nicht wie/was ich an den Header hängen muss der das dementsprechende Bild enthält und vom Server an den Client zurück geschickt wird.
Habe das Bild in ein Byte Array geladen und dieses versendet doch leider hat das nicht funktioniert!
Hallo,
Bin gerade dabei einen HTTP Server zu schreiben wenn auch nur
in abgespeckter Version! Programmiersprache VB5.0
Aua.
Bisher funktioniert dies soweit! Ich bekomme nur probleme
dabei weinn der Browser bilder anfordert! und zwar weiss ich
nicht wie/was ich an den Header hängen muss der das
dementsprechende Bild enthält und vom Server an den Client
zurück geschickt wird.
Du musst die binären Daten direkt nach dem Header schicken.
Also sowas:
Content-Length: 4560
Content-Type: image/png
# hier die binäre daten
Habe das Bild in ein Byte Array geladen und dieses versendet
doch leider hat das nicht funktioniert!
Was bedeutet „hat nicht funktioniert“? Hast du dir mal den Response deines Servers genau angeschaut? wie sieht der aus?
Wenn du den Header des Responses wegnimmst, sollte der Rest ein Bild sein, den du in jedem Bildbetrachter öffnen kannst.
Grüße,
Moritz
Response vom Server?
Wie kann ich mir den anschaun?
HTTP/1.1 200 OK
Server: Mein tolles Programm
Content-Length: xxxLänge des Bildes
Content-Language: de
Content-Type: image/jpeg
#Binäre daten des jpg bildes
Connection: close
muss dies so aussehen oder muss Connection doch vor die Binären Daten oder gar nicht rein?
hat nich funktioniert bedeutet (also ich lade ja vom Server html daten in dennen ein bild angezeigt werden soll)
die Seite wird angezeigt alles Html technische ist vorhanden die stelle an der das bild dargestellt werden soll ist vorhanden also es ist ein wenig platz zwischen verschiedenen schriften
Der Browser versucht das bild zu laden und der ladebalken hört nicht auf zu laden und das bild wird nicht angezeigT!
Hallo,
Response vom Server?
Wie kann ich mir den anschaun?
wget -S $url
Oder du verbindest dich mit telnet zu deinem Server und schreibst denn HTTP-Request per Hand.
HTTP/1.1 200 OK
Server: Mein tolles Programm
Content-Length: xxxLänge des Bildes
Content-Language: de
Content-Type: image/jpeg
#Binäre daten des jpg bildes
Connection: close
Also nach dem „Content-Type“-Header muss eine Leerzeile kommen, um das Ende des Headers anzuzeigen.
muss dies so aussehen oder muss Connection doch vor die
Binären Daten oder gar nicht rein?
Hui, das weiss ich nicht auswendig, musst du im Zweifelsfall in rfc2616 nachlesen.
Ich würde es erst mal weglassen.
Grüße,
Moritz
Hallo Fragewurm,
Bisher funktioniert dies soweit! Ich bekomme nur probleme
dabei weinn der Browser bilder anfordert! und zwar weiss ich
nicht wie/was ich an den Header hängen muss der das
dementsprechende Bild enthält und vom Server an den Client
zurück geschickt wird.
In HTML steht doch normalerweise nur ein Link zur Datei mit dem Bild.
Der Browser öffnet dann eine weitere Verbindung, z.B. zu dem angegebenen FTP-Server, und lädt dort das Bild als Datei.
MfG Peter(TOO)
–> wget -S $url
für was brauch ich den überhaupt den request? also für was muss ich den wissen?
Und wie wende ich das da oben überhaupt an? Sorry hab echt keine ahnung!
Gibt es irgendwie die möglichkeit einen Header mit bild einer anderen Seite aufzunehmen oder mitzuschneiden um diesen dann testweise auszuprobieren bzw sich ein beispiel daran zu nehmen?
Hi…
–> wget -S $url
für was brauch ich den überhaupt den request? also für was
muss ich den wissen?
Du willst einen HTTP-Server schreiben, oder?
Meinst Du nicht auch, dafür wäre es sinnvoll, zumindest ansatzweise zu verstehen wie HTTP funktioniert?
Obiger Befehl zeigt alle Header an, die der Server schickt, wenn man $url anfordert. Also meinetwegen
wget -S http://img.wer-weiss-was.de/img/logo\_new.png
für das wer-weiss-was Logo. Wenn Du das auf Deinem Server versuchst, wirst Du evtl. feststellen, daß die Header nicht wie gewünscht aussehen - wenn man mal weiß, was verkehrt läuft, kann man es viel leichter korrigieren.
wget ist standardmäßig bei jeder Linuxdistribution dabei; falls Du ein anderes Betriebssystem einsetzt, mußt Du Dir erst die passende Version beschaffen.
Mit Telnet kann man dasselbe auch von Hand machen, braucht sich aber nicht zu wundern, daß komische Dinge passieren wenn man Binärdateien anfordert.
Gibt es irgendwie die möglichkeit einen Header mit bild einer
anderen Seite aufzunehmen oder mitzuschneiden um diesen dann
testweise auszuprobieren bzw sich ein beispiel daran zu
nehmen?
Die komplette Antwort des Servers mitsamt Binäranteil bekommst Du mit
wget --save-headers $url
genumi
Ja sowas wäre super allerdings arbeite ich unter windows! und kann nichts mit dem befehl anfangen! wo kann ich den denn überhaupt einsetzen?
Also soweit funktioniert nun alles! Es hat nur eine weitere Leerzeile zwischen dem Header und dem Binärstring gefehlt!
allerdings habe ich nun ein weiteres Problem! ich habe eine html seite die 4 Bilder anzeigen soll! nur werden irgendwie immer nur 2 angezeigt immer beliebig mal die mal die!
Wenn ich nachsehe welche header vom Client ankommen wird es klarer warum dieses verhalten auftritt! Es sollte 5 mal angefragt werden so z.B.
1x Header für Html
2x Header für Bild1
3x Header für Bild2
2x Header für Bild3
4x Header für Bild4
allerdings kommt 2 mal einfach nichts an! also z.B.
1x Header für Html
2x
3x Header für Bild2
2x
4x Header für Bild4
es tritt zwar ein Ereignis für die Ankunft von Daten auf allerdings sind keine Daten vorhanden
Wie kann ich nachsehen ob und welchen Header der Browser tatsächlich versendet! (also auf dem Client nachsehen auf dem der Browser gestartet ist)
Hi…
Ja sowas wäre super allerdings arbeite ich unter windows! und
kann nichts mit dem befehl anfangen! wo kann ich den denn
überhaupt einsetzen?
Moderne Zeiten. Du bist mit grafischen Benutzeroberflächen aufgewachsen und kennst offenbar nichts anderes. Das Stichwort bei Windows heißt „DOS-Fenster“ oder „Kommandozeile“ oder wie auch immer Microsoft es in der aktuellen Version getauft hat.
Es enttäuscht mich allerdings, daß Du nichtmal auf den Gedanken kommst, Google nach „wget windows“ zu befragen.
allerdings habe ich nun ein weiteres Problem! ich habe eine
html seite die 4 Bilder anzeigen soll! nur werden irgendwie
immer nur 2 angezeigt immer beliebig mal die mal die!
Wenn ich nachsehe welche header vom Client ankommen wird es
klarer warum dieses verhalten auftritt
Das kommt darauf an, wo Du nachschaust. Wenn Du das in Deinem Server tust, ist der Fehler schon passiert. Ich gehe davon aus, daß Du einen gewöhnlichen Browser verwendest, der bei funktionierenden Servern einwandfrei alle Bilder anzeigt - folglich sind die vom Browser gesendeten Requests in Ordnung und die Verarbeitung derselben in Deinem Server nicht.
es tritt zwar ein Ereignis für die Ankunft von Daten auf
allerdings sind keine Daten vorhanden
Das lässt eine falsche oder unvollständige Behandlung des vorhergehenden Ereignisses vermuten.
Wie kann ich nachsehen ob und welchen Header der Browser
tatsächlich versendet! (also auf dem Client nachsehen auf dem
der Browser gestartet ist)
Du kannst mit Programmen wie Ethereal/Wireshark den gesamten Netzwerkverkehr mitlesen oder alternativ anstatt eines Browsers telnet verwenden und die Requests von Hand eintippen - dann weisst Du definitiv, was gesendet wird.
genumi
Moderne Zeiten. Du bist mit grafischen Benutzeroberflächen
aufgewachsen und kennst offenbar nichts anderes. Das Stichwort
bei Windows heißt „DOS-Fenster“ oder „Kommandozeile“ oder wie
auch immer Microsoft es in der aktuellen Version getauft hat.
Es enttäuscht mich allerdings, daß Du nichtmal auf den
Gedanken kommst, Google nach „wget windows“ zu befragen.
Nein die Kommandozeile ist mir durchaus bekannt auch habe ich wget dort schon ausprobiert! nur war mir da noch nicht klar dass ich dieses programm erst installieren muss! so dachte ich ich benutze den befehl irgendwie falsch und wollte nurn ochmal nach der richtigen anwendung des befehls nachfragen!
Ethereal/Wireshark werde ich gleich mal ausprobieren!
Danke für die antworten!
Allerdings wird mir dennoch nicht klar welche Probleme die Browser mit meinen Headern haben!?