Bild via TCP am Browser...?

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Mathias-Kwiatkowski

Betreff: Bild via TCP am Browser...?

BeitragMo, Jun 23, 2014 5:54
Antworten mit Zitat
Benutzer-Profile anzeigen
wie der tittel schon sagt. ich habe mir ein "server" naja ein testscript erstellt, und wollte wissen ob ich so etwas an einem browser senden kann (text) und ja dies ist möglich, mein problem jetzt nur ist wie kann ich ein bild am browser übermitteln? muss das in bytes sein? wenn ja einfach bytes zum browser schicken ???

ich habe hier mal den code wie ich mein script bislang habe... ist nicht viel aber es funtzt Very Happy wie man GET auslesen kann habe ich dann auch verstanden Very Happy FREU ...

Code: [AUSKLAPPEN]
Global ServerWeb:TTCPStream, ClientsWeb:TList, ClientWeb:TTCPStream

ServerWeb = New TTCPStream
If Not ServerWeb.Init() Then Throw("Can't create socket")
If Not ServerWeb.SetLocalPort(81) Then Throw("Can't set local port")
If Not ServerWeb.Listen() Then Throw("Can't set to listen")
ClientsWeb = New TList


Function WebConsole()
      ClientWeb = ServerWeb.Accept()

      If ClientWeb Then
         ClientsWeb.AddLast(ClientWeb)
      EndIf
   
      For ClientWeb = EachIn ClientsWeb
         If ClientWeb.GetState() <> 1 Then
            ClientWeb.Close()
            ClientsWeb.Remove(ClientWeb)
            Continue
         EndIf
   
         If ClientWeb.RecvAvail() Then
            While ClientWeb.RecvMsg() ; Wend
            
            If ClientWeb.Size() > 0 Then
               Local TCPIP:String = TNetwork.StringIP(ClientWeb.GetLocalIP())
               Local TCPPort:Int = ClientWeb.GetLocalPort()
               Local Befehl:String = ClientWeb.ReadLine()
               
               Traffik.EingangBytes = Traffik.EingangBytes + ClientWeb.Size()
               
               Print "#Web:" + Befehl
               ClientWeb.WriteLine "Server ist Online"
               ClientWeb.SendMsg()
               ClientWeb.Close()
               
            EndIf
         EndIf
      Next
      
End Function
Skype: Anarchie1984
http://projektworks.de/maxbase/
Icq - Erneuert am 21.08.2017
Yahoo - Erneuert am 21.08.2017

DAK

BeitragMo, Jun 23, 2014 11:28
Antworten mit Zitat
Benutzer-Profile anzeigen
http://stackoverflow.com/quest...tocol-in-c

Der Code ist zwar in C, der HTTP-Teil ist aber genau gleich. Die akzeptierte Antwort beschreibt genau was du schicken musst.

(/r/n ist das Zeichen für neue Zeile. Wenn du WriteLine verwendest, dann brauchst du das nicht)
Gewinner der 6. und der 68. BlitzCodeCompo

Mathias-Kwiatkowski

BeitragSa, März 07, 2015 5:41
Antworten mit Zitat
Benutzer-Profile anzeigen
das bekomme ich bloss nicht hin...

Code: [AUSKLAPPEN]
Client.WriteLine("HTTP/1.1 200 OK")
            Client.WriteLine("Content - Type:image/png")
            Client.WriteLine("Content-Length: " + FileSize("000.png"))
            Local e:TStream = ReadFile ("000.png")
            While Not Eof(e)
               Client.WriteByte(d.ReadByte())
            Wend


und mein nächstes problem wäre wenn im html ein bild vorkommt muss ich dann erst alle bilder schicken? wenn z.b. 5 bilder vorhanden sind?
Skype: Anarchie1984
http://projektworks.de/maxbase/
Icq - Erneuert am 21.08.2017
Yahoo - Erneuert am 21.08.2017

Silver_Knee

BeitragSa, März 07, 2015 10:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Du hast vergessen eine Leerzeile zu schicken bevor du mit den Bytes vom Bild anfängst.

Zu der Frage welche Bilder du bei der HTML verschickst: Da musst du auf den Browser hören. Der fragt ja zuerst "GET / HTTP1.1". Darauf antwortest du mit der HTML Datei. Die beinhaltet jetzt z.B. "abc.jpg" und "123.png". Der Browser wird dann einmal GET /abc.jpg und einmal GET /123.png fragen. Du musst das auslesen und ihm die richtige Datei geben.

Mathias-Kwiatkowski

BeitragSa, März 07, 2015 19:31
Antworten mit Zitat
Benutzer-Profile anzeigen
sehr schön. danke ja die leerzeile Very Happy

aber wie mache ich es nun. wenn im sorce steht <img>

bzw 2 bilder habe dann text und dann wieder nen bild. wie kann man das alles übertragen? weil so bekomm ich ja nur einmal ein bild. oder eben nur einmal text...

mein versuch wars

Code: [AUSKLAPPEN]
Client.WriteLine("HTTP/1.1 200 OK")
            Client.WriteLine("Date: " + CurrentDate() + " " + CurrentTime())
            Client.WriteLine("Server: AlphaUniversOnline")
            client.WriteLine("X-Powered-By: PHP/5.4.36")
            Client.WriteLine("Cache-control: no-cache")
            Client.WriteLine("Pragma: no-cache")
            

            Client.WriteLine("Content - Type:image/png")
               Client.WriteLine("Content-Length: " + FileSize("000.png"))
            client.WriteLine("")
            Local e:TStream = ReadFile ("000.png")
               While Not Eof(e)
                  Client.WriteByte(e.ReadByte())
               Wend
            CloseFile e
Local d:TStream = ReadFile ("1.html")
            While Not Eof(d)
               Client.WriteLine(d.ReadLine())
            Wend
            
            CloseFile d
 

#Reaper

Newsposter

BeitragSa, März 07, 2015 23:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Du kannst bei HTTP niemals mehrere Dateien aufeinmal übertragen. Schon gar nicht Text/HTML und Binärdateien (Bilder) zusammen. Nur alles einzeln, und das Fragt dann der Browser entsprechend auch einzeln ab. Es gäbe nur ein Workaround, indem du eine HTML-Seite erstellst, welche ein Bild via Base64 kodiert enthält. Das hat dann aber so direkt nichts mehr mit HTTP zutun.
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7

Mathias-Kwiatkowski

BeitragSo, März 08, 2015 1:23
Antworten mit Zitat
Benutzer-Profile anzeigen
wie funktioniert es dann das webseiten mehrere bilder anzeigen können zudem tabellen und text?
Skype: Anarchie1984
http://projektworks.de/maxbase/
Icq - Erneuert am 21.08.2017
Yahoo - Erneuert am 21.08.2017

DAK

BeitragSo, März 08, 2015 8:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Zuerst wird der Source der Webseite abgerufen (in einem ersten HTTP-Aufruf). Dann liest sich der Browser das File durch und findet z.B. x <img>-Tags. Für jedes <img>-Tag fragt der Browser dann in einem einzelnen HTTP-Aufruf dieses eine Bild ab. Das heißt, wenn du eine Seite mit 6 Bildern hast, dann brauchst du insgesamt 7 HTTP-Aufrufe.
Gewinner der 6. und der 68. BlitzCodeCompo

Mathias-Kwiatkowski

BeitragMo, März 09, 2015 0:24
Antworten mit Zitat
Benutzer-Profile anzeigen
demnach müsste dann so der textausgegeben werden und anschliessend das bild

nur leider wird das nichts...

Code: [AUSKLAPPEN]
Client.WriteLine("HTTP/1.1 200 OK")
            Client.WriteLine("Date: " + CurrentDate() + " " + CurrentTime())
            Client.WriteLine("Server: ServerSelbst")
            client.WriteLine("X-Powered-By: PHP/5.4.36")
            Client.WriteLine("Cache-control: no-cache")
            Client.WriteLine("Pragma: no-cache")
            Client.WriteLine("Content - Type:text/html")
            Local d:TStream = ReadFile ("1.html")
            While Not Eof(d)
               Client.WriteLine(d.ReadLine())
            Wend
            CloseFile d
                        
            
            While Client.SendMsg() ; Wend
            
            
            Client.WriteLine("Content - Type:image/png")
               Client.WriteLine("Content-Length: " + FileSize("000.png"))
            client.WriteLine("")
            Local e:TStream = ReadFile ("000.png")
               While Not Eof(e)
                  Client.WriteByte(e.ReadByte())
               Wend
            CloseFile e
            
            While Client.SendMsg() ; Wend
            Client.close()
Skype: Anarchie1984
http://projektworks.de/maxbase/
Icq - Erneuert am 21.08.2017
Yahoo - Erneuert am 21.08.2017
 

#Reaper

Newsposter

BeitragMo, März 09, 2015 2:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, so wird das sicherlich nichts. Du musst schon darauf warten, dass der Browser die Bilder von dir will, einfach senden geht nicht. Du müsstest also wenn schon einen (mehr oder weniger) kompletten Webserver schreiben. Dazu müsstest du dir das HTTP-Protokoll genauer anschauen. Das wird dann aber schon ein wenig aufwendiger.
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group