http server header

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Pummelie

Betreff: http server header

BeitragSa, Mai 23, 2009 19:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
ich wollt gerade auf die schnelle einen Fileserver fürs lokale netz schreiben, aber ich bekomm das mit dem http header nicht ganz hin.
ich habe schon etliche seiten durchgeschaut, aber es taucht immer das Problem auf, das der Client, z.b. Internet Explorer die daten der Datei nicht nimmt, bessergesagt sie ignoriert, und auf weitere daten wartet.

Der Code (ausschnitt):
Code: [AUSKLAPPEN]

Verz = ReadDir(root$)
                        page = WriteFile("page.html")
                        WriteLine page,"<html>"
                        WriteLine page,"<head>"
                        WriteLine page,"<title>Index von: " + root$ + "</title>"
                        WriteLine page,"</head>"
                        WriteLine page,"<body bgcolor=" + Chr(34) + "#808080" + Chr(34) + ">"
                        WriteLine page,"<center>"
                        Repeat
                           Datei$ = NextFile$(Verz)
                           If Datei$ = "" Then Exit
                           If FileType("C:\" + Datei$) = 2 Then
                              WriteLine page,"<a href="+Chr(34)+root$+Datei$+Chr(34)+">Ordner: "+Datei$+"</a><br>"
                           Else
                              WriteLine page,"<a href="+Chr(34)+root$+Datei$+Chr(34)+">Datei: "+Datei$+"</a><br>"
                           End If
                        Forever
                        CloseDir Verz
                        WriteLine page,"</center>"
                        WriteLine page,"</body>"
                        WriteLine page,"</html>"
                        CloseFile page
                        WriteLine pers(i),"HTTP/1.1 200 OK"
                        Repeat
                           dd = ReadLine$(pers(i))
                        Until dd = 0 Or dd = ""
                        WriteLine pers(i),"Server: Apache/1.3.29 (Unix) PHP/4.3.4"
                        WriteLine pers(i),"Content-Length: " + FileSize("page.html")
                        WriteLine pers(i),"Content-Language: de"
                        WriteLine pers(i),"Content-Type: Text/html"
                        WriteLine pers(i),"Connection: close"
                        WriteLine pers(i),""
                        page = OpenFile("page.html")
                        Repeat
                           ReadBytes(Bank(i),page,0,102400)
                           WriteBytes(Bank(i),pers(i),0,102400)
                           Select Eof(page)
                              Case 1
                                 Exit
                           End Select
                        Forever
                        CloseFile(page)
                        pers(i) = 0

Das erstellen der Datei page functioniert.
Das ganze läuft in einer for next schleife ab desswegen ständig das i.
It's done when it's done.

ZaP

BeitragSa, Mai 23, 2009 23:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Hast du schon versucht den Stream zu schließen?
Starfare: Worklog, Website (download)

Pummelie

BeitragSa, Mai 23, 2009 23:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja dann kommt seite kann nicht angezeigt werden.
Eigentlich sollte der browser die verbindung schließen (so steht es jedenfalls im header).
It's done when it's done.

Starwar

BeitragSo, Mai 24, 2009 11:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
Wenn du im Header text/html angibst solltest du mal versuchen die Daten wirklich auch als Text zu versenden: WriteLine
MFG

Pummelie

BeitragSo, Mai 24, 2009 12:20
Antworten mit Zitat
Benutzer-Profile anzeigen
thx, jetzt sagt der client schon mal, das etwas angekommen ist (fortschritsbalken fast bis ende).
Doch komplett fertig ist er noch nicht, und da die seite ja kein favicon hat, wartet der client sicher auf was anderes aber was?
It's done when it's done.

Xaymar

ehemals "Cgamer"

BeitragSo, Mai 24, 2009 18:10
Antworten mit Zitat
Benutzer-Profile anzeigen
lass dir doch mal den stream als debug ausgeben(das was browser->programm sendet)
Warbseite

Pummelie

BeitragSo, Mai 24, 2009 19:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Nun ja, das sind alles nur unterstützt dinge usw. nichts nützliches.
It's done when it's done.

Holzchopf

Meisterpacker

BeitragSo, Mai 24, 2009 19:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du (der server) Connection: close sendest, musst du in BB den TCP-Stream auch schliessen, um dem Clienten mitzuteilen, dass die übertragung zuende ist.
Alternativ besteht noch die möglichkeit, dass der Browser noch weitere Daten anfrägt und wartet, dass diese gesendet werden - aber diese Anfragen würden dann natürlich wieder mit HTTP Header und co im Log des Servers erscheinen (wenn du sowas überhaupt logst... wäre aber von Vorteil)

mfG
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Pummelie

BeitragSo, Mai 24, 2009 19:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Also,
ich schließe die Verbindung nach übertragen, und ich log alles.
Hier mal der ganze (kleine) Programm Code:
Code: [AUSKLAPPEN]

AppTitle "File Server"
Local i,stream,pos,ip$,fullvile,timer = CreateTimer(40),zeichen,root$ = "C:\",stream2,page,eintr,a,Verz,Datei$,rr$,dd,b
Global host = CreateTCPServer(80),hosts = CreateTCPServer(443),win,can
Dim Menu(6)
If host = 0 Then Notify("Fehler beim erstellen des Server´s!" + Chr(13) + "Schalten sie Port 80 frei.",1):End
If hosts = 0 Then Notify("Fehler beim erstellen des aAdmin Server!" + Chr(13) + "Schalten sie Port 81 frei.",1):End
loadgui()
Dim pers(4)
Dim ord$(4)
Dim Bank(4)
Dim sant$(4)
Dim roote$(2000,1)
For i=0 To 4
   Bank(i) = CreateBank(102400)
Next
Repeat
   stream = AcceptTCPStream(host)
   stream2 = AcceptTCPStream(hosts)
   Select stream2
      Case 0
      Default
         pos = pos + 12
         Text 0,pos,"Verbindung auf https - Verweigert ("+CurrentTime$()+")"
         CloseTCPStream stream2
         FlipCanvas can
         stream2 = 0
   End Select
   Select stream
      Case 0
      Default
         ip$ = DottedIP$(stream)
         pos = pos + 12
         Text 0,pos,ip$ + " stellt eine Verbindung her (" + CurrentTime$() + ")"
         FlipCanvas can
         For i=0 To 4
            Select pers(0)
               Case 0
                  pers(i) = stream
                  stream = 0
                  pos = pos + 12
                  Text 0,pos,ip$ + " wurde dem Index " + i + " zugeteilt (" + CurrentTime$() + ")"
                  FlipCanvas can
            End Select
         Next
         If stream <> 0 Then
            pos = pos + 12
            Text 0,pos,"Maximale streams erreicht, errorpatch wird angezeigt (" + CurrentTime$() + ")"
            FlipCanvas can
            WriteLine(stream,"HTTP/1.0 503 SERVICE UNAVAILABLE")
            stream = 0
         EndIf
   End Select
   For i=0 To 4
      Select pers(i)
         Case 0
         Default
            sant$(i) = ReadLine$(pers(i))
            Select sant$(i)
               Case 0
               Default
                  zeichen = Len(sant$(i))
                  zeichen = zeichen - 9
                  sant$(i) = Left$(sant$(i),zeichen)
                  zeichen = Len(sant$(i))
                  zeichen = zeichen - 4
                  sant$(i) = Right$(sant$(i),zeichen)
                  If Left$(sant$(i),2) = "pt" Or Left$(sant$(i),1) = "-" Or Left$(sant$(i),1) = ":" Then Goto notext
                  pos = pos + 12
                  Text 0,pos,"Client in index " + i + " sendet: get " + sant$(i)
                  FlipCanvas can
                  .notext
                  For b = 0 To eintr
                  Select sant$(i)
                     Case ""
                        Verz = ReadDir(root$)
                        page = WriteFile("page.html")
                        WriteLine page,"<html>"
                        WriteLine page,"<head>"
                        WriteLine page,"<title>Index von: " + root$ + "</title>"
                        WriteLine page,"</head>"
                        WriteLine page,"<body bgcolor=" + Chr(34) + "#808080" + Chr(34) + ">"
                        WriteLine page,"<center>"
                        eintr = 0
                        Repeat
                           a = a +1
                           Datei$ = NextFile$(Verz)
                           If Datei$ = "" Then Exit
                           If FileType("C:\" + Datei$) = 2 Then
                              WriteLine page,"<a href="+Chr(34)+root$+Datei$+Chr(34)+">Ordner: "+Datei$+"</a><br>"
                              roote$(a,0) = Datei$
                           Else
                              WriteLine page,"<a href="+Chr(34)+root$+Datei$+Chr(34)+">Datei: "+Datei$+"</a><br>"
                              roote$(a,1) = Datei$
                           End If
                        Forever
                        eintr = a
                        a = 0
                        CloseDir Verz
                        WriteLine page,"</center>"
                        WriteLine page,"</body>"
                        WriteLine page,"</html>"
                        CloseFile page
                        WriteLine pers(i),"HTTP/1.0 200 OK"
                        Repeat
                           dd = ReadLine$(pers(i))
                        Until dd = 0 Or dd = ""
                        WriteLine pers(i),"Server: Apache/1.3.29 PHP/4.3.4"
                        WriteLine pers(i),"Content-Length: " + FileSize("page.html")
                        WriteLine pers(i),"Content-Language: de"
                        WriteLine pers(i),"Content-Type: text/html"
                        WriteLine pers(i),"Connection: close"
                        WriteLine pers(i),""
                        page = OpenFile("page.html")
                        pos = pos + 12
                        Text 0,pos,"Page Datei erstellt, beginne Transpher"
                        FlipCanvas can
                        Repeat
                           rr$ = ReadLine$(page)
                           WriteLine pers(i),rr$
                           Select Eof(page)
                              Case 1
                                 pos = pos + 12
                                 Text 0,pos,"Datei gesendet"
                                 FlipCanvas can
                                 Exit
                           End Select
                        Forever
                        CloseFile(page)
                        CloseTCPStream pers(i)
                        pers(i) = 0
                     Case roote$(b,0)
                        ord$(i) = root$ + sant$(i)
                        Verz = ReadDir(ord$(i))
                        page = WriteFile("page.html")
                        WriteLine page,"<html>"
                        WriteLine page,"<head>"
                        WriteLine page,"<title>Index von: " + root$ + "</title>"
                        WriteLine page,"</head>"
                        WriteLine page,"<body bgcolor=" + Chr(34) + "#808080" + Chr(34) + ">"
                        WriteLine page,"<center>"
                        eintr = 0
                        Repeat
                           a = a +1
                           Datei$ = NextFile$(Verz)
                           If Datei$ = "" Then Exit
                           If FileType(ord$(i) + Datei$) = 2 Then
                              WriteLine page,"<a href="+Chr(34)+root$+Datei$+Chr(34)+">Ordner: "+Datei$+"</a><br>"
                           Else
                              WriteLine page,"<a href="+Chr(34)+root$+Datei$+Chr(34)+">Datei: "+Datei$+"</a><br>"
                           End If
                        Forever
                        a = 0
                        CloseDir Verz
                        WriteLine page,"</center>"
                        WriteLine page,"</body>"
                        WriteLine page,"</html>"
                        CloseFile page
                        WriteLine pers(i),"HTTP/1.0 200 OK"
                        Repeat
                           dd = ReadLine$(pers(i))
                        Until dd = 0 Or dd = ""
                        WriteLine pers(i),"Server: Apache/1.3.29 PHP/4.3.4"
                        WriteLine pers(i),"Content-Length: " + FileSize("page.html")
                        WriteLine pers(i),"Content-Language: de"
                        WriteLine pers(i),"Content-Type: text/html"
                        WriteLine pers(i),"Connection: close"
                        WriteLine pers(i),""
                        page = OpenFile("page.html")
                        pos = pos + 12
                        Text 0,pos,"Page Datei erstellt, beginne Transpher"
                        FlipCanvas can
                        Repeat
                           rr$ = ReadLine$(page)
                           WriteLine pers(i),rr$
                           Select Eof(page)
                              Case 1
                                 pos = pos + 12
                                 Text 0,pos,"Datei gesendet"
                                 FlipCanvas can
                                 Exit
                           End Select
                        Forever
                        CloseFile(page)
                        CloseTCPStream pers(i)
                        pers(i) = 0
                  End Select
               Next
                  sant$(i) = 0
            End Select
      End Select
   Next
   Select WaitEvent(10)
      Case $803
         End
   End Select
Forever
Function loadgui()
   Local x = apiGetSystemMetrics(0)/2-250:Local y = apiGetSystemMetrics(1)/2-200
   win = CreateWindow("File Server",x,y,500,400,0,5)
   can = CreateCanvas(0,0,500,350,win)
   SetBuffer CanvasBuffer(can)
   ClsColor(255,255,255)
   Color(0,0,0)
   Cls
   Text(0,0,"Server gestartet - Port 80 (" + CurrentTime$() + ")")
   FlipCanvas can
   Menu(1) = CreateMenu("Datei", 1, WindowMenu(win))
   Menu(2) = CreateMenu("Einstellungen", 2, WindowMenu(win))
   Menu(3) = CreateMenu("Stop Server", 3, Menu(1))
   Menu(4) = CreateMenu("Beenden", 4, Menu(1))
   Menu(5) = CreateMenu("Port", 5, Menu(2))
   Menu(6) = CreateMenu("Root", 6, Menu(2))
   UpdateWindowMenu win
   
End Function
It's done when it's done.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group