Page 1 sur 1

Serveur Web

Publié : lun. 08/oct./2012 21:13
par nico
J'ai repris l'exemple de l'aide pour me créer un serveur web, l'exemple utilise un gosub, j'ai voulu le supprimer et mettre une procédure mais voilà ça ne marche plus; je vous poste un petit exemple illustrant le problème, je ne comprend pas (possible que je fasse une grosse boulette mais là je vois pas!)

Code : Tout sélectionner

Global ClientID.i

Procedure Main()
  erreur$ = "HTTP/1.1 404 OK" + EOL$
  erreur$ = erreur$ + "Server: Atomic Web Server 0.2b" + EOL$
  erreur$ = erreur$ + "Content-Length: " + Str(56) + EOL$
  erreur$ = erreur$  + EOL$
  erreur$ = erreur$ + "<HTML><HEAD></HEAD><BODY>Page inexistante!</BODY></HTML>"
  erreur.l = 1
  Debug "********************"
  SendNetworkData(ClientID, @erreur$, Len(erreur$))
EndProcedure

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

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

Global EOL$

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

If CreateNetworkServer(0, Port)
  
  OpenWindow(0, 100, 200, 230, 0, "Atomic Web Server (Port " + Str(Port) + ")")
  
  Repeat
    
    Repeat
      WEvent = WindowEvent()
      
      If WEvent = #PB_Event_CloseWindow : Quit = 1 : EndIf
    Until WEvent = 0
    
    SEvent = NetworkServerEvent()
    
    If SEvent
      ClientID.i = EventClient()
      
      Select SEvent
          
        Case 1 ; When a new client has been connected...
          
        Case 4 ; When a client has closed the connection...
          
        Default
          *Buffer = AllocateMemory(2000)
          RequestLength.l = ReceiveNetworkData(ClientID, *Buffer, 2000)
          
; Essayer l'un ou l'autre     
;-----------------------------------------------------------------------------------------------------
;Fonctionne!
          erreur$ = "HTTP/1.1 404 OK" + EOL$
          erreur$ = erreur$ + "Server: Atomic Web Server 0.2b" + EOL$
          erreur$ = erreur$ + "Content-Length: " + Str(56) + EOL$
          erreur$ = erreur$  + EOL$
          erreur$ = erreur$ + "<HTML><HEAD></HEAD><BODY>Page inexistante!</BODY></HTML>"
          erreur.l = 1
          Debug "********************"
          SendNetworkData(ClientID, @erreur$, Len(erreur$))
;-----------------------------------------------------------------------------------------------------
; Ne fonctionne pas!
;Main()
;-----------------------------------------------------------------------------------------------------

      EndSelect
      
    Else
      Delay(20) ; Don't stole the whole CPU !
    EndIf
    
  Until Quit = 1
  
  CloseNetworkServer(0)
Else
  MessageRequester(AtomicTitle$, "Error: can't create the server (port in use ?).", 0)
EndIf

End

Re: Serveur Web

Publié : lun. 08/oct./2012 21:32
par falsam
Je pense qu'il s'agit juste d'un problème de déclaration de variables. Du coup j'ai tout mis.
Chez moi ça fonctionne maintenant. Ne pas oublier de donner l'autorisation au pare-feu si existant.

Code : Tout sélectionner

EnableExplicit

Global ClientID.i, Port.i, BaseDirectory$, DefaultPage$, AtomicTitle$, Quit.b, *Buffer, RequestLength.l
Global EOL$="</br>"

Define.l WEvent, SEvent


Procedure Main()
  Protected Erreur$, Erreur.l 
  erreur$ = "HTTP/1.1 404 OK" + EOL$
  erreur$ = erreur$ + "Server: Atomic Web Server 0.2b" + EOL$
  erreur$ = erreur$ + "Content-Length: " + Str(56) + EOL$
  erreur$ = erreur$  + EOL$
  erreur$ = erreur$ + "<HTML><HEAD></HEAD><BODY>Page inexistante!</BODY></HTML>"
  erreur = 1
  Debug "********************"
  SendNetworkData(ClientID, @erreur$, Len(erreur$))
EndProcedure

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

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

Global EOL$

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

If CreateNetworkServer(0, Port)
  
  OpenWindow(0, 100, 200, 230, 0, "Atomic Web Server (Port " + Str(Port) + ")")
  
  Repeat
    
    Repeat
      WEvent = WindowEvent()
      
      If WEvent = #PB_Event_CloseWindow : Quit = 1 : EndIf
    Until WEvent = 0
    
    SEvent = NetworkServerEvent()
    
    If SEvent
      ClientID = EventClient()
      
      Select SEvent
          
        Case 1 ; When a new client has been connected...
          
        Case 4 ; When a client has closed the connection...
          
        Default
          *Buffer = AllocateMemory(2000)
          RequestLength = ReceiveNetworkData(ClientID, *Buffer, 2000)
          
; Essayer l'un ou l'autre     
;-----------------------------------------------------------------------------------------------------
;Fonctionne!
;          erreur$ = "HTTP/1.1 404 OK" + EOL$
;          erreur$ = erreur$ + "Server: Atomic Web Server 0.2b" + EOL$
;          erreur$ = erreur$ + "Content-Length: " + Str(56) + EOL$
;          erreur$ = erreur$  + EOL$
;          erreur$ = erreur$ + "<HTML><HEAD></HEAD><BODY>Page inexistante!</BODY></HTML>"
;          erreur.l = 1
;          Debug "********************"
;          SendNetworkData(ClientID, @erreur$, Len(erreur$))
;-----------------------------------------------------------------------------------------------------
; Ne fonctionne pas!
Main()
;-----------------------------------------------------------------------------------------------------

      EndSelect
      
    Else
      Delay(20) ; Don't stole the whole CPU !
    EndIf
    
  Until Quit = 1
  
  CloseNetworkServer(0)
Else
  MessageRequester(AtomicTitle$, "Error: can't create the server (port in use ?).", 0)
EndIf

End

Re: Serveur Web

Publié : lun. 08/oct./2012 21:54
par nico
Ok, je vois la boulette, c'est que j'ai placé Global EOL$ après la procédure concernée au lieu de la placée au tout début du fichier.

Merci à toi :)