Serveur Web

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Serveur Web

Message 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
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Serveur Web

Message 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
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Serveur Web

Message 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 :)
Répondre