Atomic Web Server / FTP Server (SRC) - Compiler Fehler

Anfängerfragen zum Programmieren mit PureBasic.
RealTTX
Beiträge: 2
Registriert: 29.06.2008 23:17

Atomic Web Server / FTP Server (SRC) - Compiler Fehler

Beitrag von RealTTX »

Hallo, ich habe mir gedacht ich fang ein bisschen an mit PB und habe schon ein paar Probleme... Ich habe so gut ich es hinbekommen habe in der neuen IDE / Editor schon ein bisschen debuggen versucht. Aber leider ohne Erfolg. Ich versuche den Atomic Web Server zum laufen zu bekommen. Ich bekomme jedoch folgende Fehlermeldung :

Code: Alles auswählen

InitFile() is not a function, array ....
Leider weis ich nicht genau was mir der Compiler damit sagen will ?

Hier der folgende Code den ich versuche zu compilen :

Code: Alles auswählen

;
; ------------------------------------------------------------
;
;       Atomic Web Server in PureBasic by AlphaSND
;
;           (c) 2001 - Fantaisie Software
;
; ------------------------------------------------------------
;
; 25/03/2001
;   Added path relative feature. It can be started everywhere
;   Added the window to kill it easely
;
; 19/03/2001
;   Added some new features (clients closed automatically)
;
; 17/03/2001
;   First version.
;

InitFile(0)
InitWindow(0)

If InitNetwork() = 0
  MessageRequester("Error", "Can't initialize the network !", 0)
  End
EndIf

DefType.l

Port = 80
BaseDirectory$ = "www\"
DefaultPage$   = "Index.html"
AtomicTitle$   = "Atomic Web Server v1.0"

Global EOL$

EOL$ = Chr(13)+Chr(10)

*Buffer = GlobalAlloc_(#GMEM_FIXED | #GMEM_ZEROINIT, 10000)

If CreateNetworkServer(Port)

  OpenWindow(0, 100, 100, 230, 0, #PB_Window_SystemMenu, "Atomic Web Server (Port "+Str(Port)+")")
  
  Repeat
    
    WEvent.l = WindowEvent()
    SEvent.l = NetworkServerEvent()
  
    If WEvent = #PB_EventCloseWindow
      Quit = 1
    EndIf

    If SEvent

      ClientID.l = NetworkClientID()
  
      Select SEvent
      
        Case 1  ; When a new client has been connected...
          
        Case 4  ; When a client has closed the connection...
  
        Default
          RequestLength.l = ReceiveNetworkData(ClientID, *Buffer, 2000)
          Gosub ProcessRequest
          
      EndSelect
    Else
      Sleep_(20)  ; Don't stole the whole CPU !
    EndIf
    
  Until Quit = 1 
    
  CloseNetworkServer()
Else
  MessageRequester(AtomicTitle$, "Error: can't create the server (port in use ?).", #MB_ICONERROR)
EndIf
  
End 



Procedure.l BuildRequestHeader(*Buffer, DataLength.l, ContentType$)

  Length = PokeS(*Buffer, "HTTP/1.1 200 OK"+EOL$)                     : *Buffer+Length
  Length = PokeS(*Buffer, "Date: Wed, 07 Aug 1996 11:15:43 GMT"+EOL$) : *Buffer+Length
  Length = PokeS(*Buffer, "Server: Atomic Web Server 0.2b"+EOL$)      : *Buffer+Length
  Length = PokeS(*Buffer, "Content-Length: "+Str(DataLength)+EOL$)    : *Buffer+Length
  Length = PokeS(*Buffer, "Content-Type: "+ContentType$+EOL$)         : *Buffer+Length
  Length = PokeS(*Buffer, EOL$)                                       : *Buffer+Length

  ; Length = PokeS(*Buffer, "Last-modified: Thu, 27 Jun 1996 16:40:50 GMT"+Chr(13)+Chr(10)  , *Buffer) : *Buffer+Length
  ; Length = PokeS(*Buffer, "Accept-Ranges: bytes"+EOL$                 , *Buffer) : *Buffer+Length
  ; Length = PokeS(*Buffer, "Connection: close"+EOL$) : *Buffer+Length

  ProcedureReturn *Buffer
EndProcedure


ProcessRequest:

  a$ = PeekS(*Buffer)
  
  If Left(a$, 3) = "GET"

    MaxPosition = FindString(a$, Chr(13), 5)
    Position = FindString(a$, " ", 5)
    If Position < MaxPosition
      RequestedFile$ = Mid(a$, 6, Position-5)      ; Automatically remove the leading '/'
      RequestedFile$ = StripTrail(RequestedFile$)
    Else
      RequestedFile$ = Mid(a$, 6, MaxPosition-5)   ; When a command like 'GET /' is sent..
    EndIf

      ; The following routine transforme all '/' in '\' (Windows format)
      ;
      Structure tmp
        a.b
      EndStructure

      If RequestedFile$ = ""
        RequestedFile$ = DefaultPage$
      Else
        *t.tmp = @RequestedFile$
        While *t\a <> 0
          If *t\a = '/' : *t\a = '\' : EndIf
          *t+1
        Wend
      EndIf

      ; Test if the file exists, and if not display the error message
      ;   
      If ReadFile(0, BaseDirectory$+RequestedFile$) : CloseFile(0) : Else : RequestedFile$ = "AtomicWebServer_Error.html" : EndIf

      If ReadFile(0, BaseDirectory$+RequestedFile$)
        FileLength = Lof()

        Select Right(RequestedFile$,4)
          Case ".gif"
            ContentType$ = "image/gif"

          Case ".jpg"
            ContentType$ = "image/jpeg"

          Case ".txt"
            ContentType$ = "text/plain"

          Case ".zip"
            ContentType$ = "application/zip"

          Default
            ContentType$ = "text/html"

        EndSelect
        
        *FileBuffer   = GlobalAlloc_(#GMEM_FIXED|#GMEM_ZEROINIT, FileLength+200)
        *BufferOffset = BuildRequestHeader(*FileBuffer, FileLength, ContentType$)

        ReadMemory(*BufferOffset, FileLength)

        CloseFile(0)
 
        SendNetworkData(ClientID, *FileBuffer, *BufferOffset-*FileBuffer+FileLength)
        GlobalFree_(*FileBuffer)
      Else
        MessageRequester(AtomicTitle$, "Error: Can't open the file "+BaseDirectory$+RequestedFile$, #MB_ICONERROR)
      EndIf
  EndIf

Return

So.. Nun habe ich auch ein Problem mit dem FTP Server , der sagt mir das CreateNetworkServer falsche Parameter enthält..

Die Zeile aus dem Code :

Code: Alles auswählen

If CreateNetworkServer(Port)
Ich hoffe jemand hat ein paar Ideen :)

MFG , Real-TTX
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Code: Alles auswählen

RunProgram(#PB_Compiler_Home + "Examples\Sources - Advanced\Atomic FTP Server\Atomic FTP Server.pb")
Teste mal diesen Code :mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
RealTTX
Beiträge: 2
Registriert: 29.06.2008 23:17

Beitrag von RealTTX »

Ach? Da gibt es auch noch Examples :O Ich dachte die auf www.purebasic.de sind schon nahezu offizielle Beispiele :/ Danke für den Hinweis :D:D
Antworten