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
Message
par nico » lun. 08/oct./2012 21:13
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
falsam
Messages : 7324 Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :
Message
par falsam » lun. 08/oct./2012 21:32
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
Message
par nico » lun. 08/oct./2012 21:54
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