[Re OK]Probléme de serveur Web impossible...

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

[Re OK]Probléme de serveur Web impossible...

Message par JohnJohnsonSHERMAN »

Edit : Ce probléme est résolu, celui du message suivant non :(
Edit 2 : En fait si :)
Edit 3 : Le code a été mis à jour et n'est donc plus la version erronée
Avertissement : le présent Sherman est sur le point de planter totalement par overflow de ras le bol, et de renoncer à tout jamais à faire un serveur Web en pb :(

Ca fait des millions d'heures (environ 9 au total) que j'essaie de faire un serveur Web trés basique en PB. Ledit serveur doit :
  • Être capable de répondre à une requête GET pour renvoyer une page.
C'est tout... pas compliqué non?

Pourtant ca fait environ 3 codes que je jette par dépit de les faire fonctionner... :( Soyons clair : pour envoyer une page, il faut : du code HTML + un header pour dire que c'est de l'HTML.
Voici un header :

Code : Tout sélectionner

HTTP/1.1 200 OK
Date: Mon, 23 Jan 2017 <heure> GMT
Server: PureServer Marche po 0.0
Content-Type: text/html
Content-Length: <un certain nombre>
Eh bien pas moyen d'avoir une page Web affichée dans aucun navigateur :( :( :twisted: :twisted: :cry: :cry:
Dans le meilleur des cas (sans aucun header), le code source est affiché, comme du plain text (normal), dans le pire (avec le header) seule une partie de celui-ci est effectivement envoyée au navigateur, puis la connection se ferme avant que tout ne soit chargé, ou alors, la requête boucle sur le début du header et l'affiche en texte brut... Bref RIEN à comprendre... :(
La page Web, aussi helloworldement simple soit-elle , ne s'affiche jamais :(.. Jamais.

Voici un des codes de test, le premier, celui qui affiche le texte brut :
Le code corrigé et fonctionnel de la premiére version du serveur :

Code : Tout sélectionner

#Server = 42
#Port = 1946
#Root$ = "www"

Declare HTMLRequestProvider(Request$)
Declare URLtoFile(RootPath$,URL$)

Global gFileLen

Structure HTML_REQUEST
  Method.s            ;Méthode (GET/POST/PUT...)
  File.s              ;Fichier demandé
  ProtocolVersion.s   ;Version d'HTTP
EndStructure

Structure REQUEST
  Req.HTML_REQUEST    ;Requête HTML
  Sender.s            ;Envoyeur (IP)
  BrowserInfos.s      ;Infos aditionnelles
EndStructure

OpenConsole("Serveur Web PureWeb v0.1")
ConsoleColor(0,15)
PrintN("                    Web Server PureWeb v 0.1b                    ")
ConsoleColor(15,0)

If Not InitNetwork() 
  MessageRequester("Serveur local","Erreur fatale : impossible d'initialiser le réseau.") : End
EndIf


If CreateNetworkServer(#Server,#Port)
  PrintN("Server running on port : "+#Port)
  ConsoleTitle("Serveur Web PureWeb v0.1 , port : "+Str(#Port))
  ;blabla de merde ici
  
  Repeat
    Sevent = NetworkServerEvent(#Server)
    
    Select Sevent
        
      Case #PB_NetworkEvent_Connect;Un client est connecté
        ClientID = EventClient()
        ClientIP = GetClientIP(ClientID)
        PrintN(FormatDate("[%hh:%ii:%ss - %dd/%mm/%yyyy]",Date())+" New client connected :"+Str(ClientIP))
        
      Case #PB_NetworkEvent_Data ;Un client envoie des données/requêtes
        ClientID = EventClient()
        ClientIP = GetClientIP(ClientID)
        
        PrintN(FormatDate("[%hh:%ii:%ss - %dd/%mm/%yyyy]",Date())+" IP : "+IPString(ClientIP)+" - Client has sent a packet.")
        PrintN("Receiving datas...")
        ConsoleColor(7,0)
        
        *Buffer = AllocateMemory(1024);Buffer pour requête
        
        If Not *Buffer : Debug "erreur" : EndIf
        
        ReceiveNetworkData(ClientID,*Buffer,1024);On récupére la requête reçue
        Request$ = PeekS(*Buffer,1024,#PB_UTF8)

        PrintN(Request$)
     
        *ptr_Result =  HTMLRequestProvider(Request$) ;On récupére la page associée à l'URL aprés résolution de la requête
        
        If *ptr_Result
          ConsoleColor(0,7)
          PrintN("=======================Sended file : ==============================")
          ConsoleColor(7,0)
          Print(PeekS(*ptr_Result,-1,#PB_UTF8))
        
          SendNetworkData(ClientID,*ptr_Result,gFileLen) ;On envoie la page
          
          ConsoleColor(0,7)
          PrintN("===================================================================")
          ConsoleColor(7,0)
        Else
          ConsoleColor(12,0)
          PrintN("404 file not found.")
          
          *ptr_Result =  URLtoFile(#Root$,"/error/404.html")
          SendNetworkData(ClientID,*ptr_Result,gFileLen)
        EndIf 
        
        ConsoleColor(15,0)
        CloseNetworkConnection(ClientID)
    EndSelect
    
  ForEver
  
Else
  MessageRequester("Serveur local","Erreur ! Impossible de créer le serveur Web sur le port "+#Port+".",#PB_MessageRequester_Error)
EndIf


;-Procédures

Procedure HTMLRequestProvider(Request$)
  Protected Request.REQUEST, *ptrPage
  ;Dissection des informations de la requête, possibilité de s'en servir pour personnaliser/pour logger
  HTMLRequest$ = StringField(Request$,1,#LF$)
  Request\Sender = StringField(Request$,2,#LF$)
  Request\BrowserInfos = StringField(Request$,3,#LF$)
  
  Request\Req\Method = StringField(HTMLRequest$,1," ")
  Request\Req\File = StringField(HTMLRequest$,2," ")
  Request\Req\ProtocolVersion = StringField(HTMLRequest$,3," ")
  
  If Request\Req\File = "" Or Request\Req\File = "/"  ;Pas de page spécifiée? On affiche "index"
    *ptrPage = URLtoFile(#Root$,"index.html")
  Else
    *ptrPage = URLtoFile(#Root$,Request\Req\File)     ;Sinon on charge la page demandée
  EndIf
  
  ProcedureReturn *ptrPage
EndProcedure

Procedure.s GetDate()

  Hour$ = FormatDate("%hh:%ii:%ss",Date())
  Year$ = Str(Year(Date()))
  DayOfMonth$ = Str(Day(Date()))
  
DayOfWeek$ = StringField("Sun,Mon,Tue,Wed,Thu,Fri,Sat", DayOfWeek(Date()) + 1, ",")

Month$ = StringField("Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", Month(Date()), ",")
                                                                    
  ProcedureReturn DayOfWeek$ + ", " + DayOfMonth$ + " " + Month$ + " " + Year$ + " " + Hour$
EndProcedure

Procedure.s FileExtension(File$)
  ProcedureReturn "." + StringField(File$, CountString(File$,".")+1, ".")
EndProcedure

Procedure URLtoFile(RootPath$, URL$)
  ;  ReplaceString(URL$,"/","\",#PB_String_InPlace)
  
  File = ReadFile(#PB_Any,RootPath$+URL$,#PB_File_SharedRead | #PB_UTF8)
  
  If File
    
    gFileLen = Lof(File)
    Debug URL$ + gFileLen
    *FileBuffer = AllocateMemory(gFileLen)
    
    If *FileBuffer
      htmlLen = ReadData(File,*FileBuffer,gFileLen)
    EndIf
    
    CloseFile(File)
    
   ; filecontent$ = PeekS(*FileBuffer,gFileLen,#PB_UTF8)
   ; Debug "Mémoire fichier : "+filecontent$
    
    
    Select FileExtension(URL$)
      Case ".html"
        ContentType$ = "text/html"
        
      Case ".gif"
        ContentType$ = "image/gif"
        
      Case ".jpg"
        ContentType$ = "image/jpeg"
        
      Case ".png"
        ContentType$ = "image/png"
        
      Case ".txt"
        ContentType$ = "text/plain"
        
      Case ".zip"
        ContentType$ = "application/zip"
        
      Case ".css"
        ContentType$ = "text/css"
        
      Case ".js"
        ContentType$ = "application/javascript"
        
      Case ".xml"
        ContentType$ = "application/xml"
        
      Case ".pdf"
        ContentType$ = "application/pdf"
        
      Case ".exe"
        ContentType$ = "application/octet-stream"
        
      Case ".ogg"
        ContentType$ = "application/ogg"
        
      Case ".mp3"
        ContentType$ = "audio/mpeg"
        
      Default
        ContentType$ = "application/octet-stream"
        
    EndSelect
    
    header$ = "HTTP/1.1 200 OK" + #CRLF$+
              "Date: "+GetDate()+"GMT" + #CRLF$+
              "Server: PureServer v0.0"  + #CRLF$+
              "Content-Length: "+Str(gFileLen) + #CRLF$+
              "Content-Type: "+ContentType$ + #CRLF$ + #CRLF$
    
    headerLen = Len(header$)
    gFileLen + headerLen
    
    *Document = AllocateMemory(gFileLen)
    
    *ptr = *Document
    *ptr + PokeS(*Document,header$,headerLen,#PB_UTF8)
    
    CopyMemory(*FileBuffer,*ptr,htmlLen)
    FreeMemory(*FileBuffer)    
    
    ProcedureReturn *Document
  Else
    ProcedureReturn 0
  EndIf
EndProcedure
Si vous testez, vous verrez que ca ne marche pas.Enfin que ca marche trés bien maintenant

Par dépit j'ai essayé le Atomic Web server qui est dans le dossier \Examples\Sources_Advanced de PB, qui biiiien évidemment ne marche pas non plus Lui,il est toujours cassé, mais c'est pas grave ^^ (aucune réaction à la requête, aucun affichage... Bref je preds pied et j'ai vraiement besoin d'aide, je suis dans le noir complet... je vais finir par abandonner cette idée et conclure qu'il est IMPOSSIBLE de faire un serveur en PB... Ben si en fait c'était possible :) ^^
Dernière modification par JohnJohnsonSHERMAN le mar. 24/janv./2017 13:33, modifié 5 fois.
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Re: Probléme de serveur Web impossible...

Message par JohnJohnsonSHERMAN »

Ok merci pour votre aide le probléme est résolu... :mrgreen: :mrgreen:
Désolé de ne pas vous dire ce que c'était, j'ai bien trop honte :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :mrgreen:
EDIT : Résolu !
Le premier probléme a été résolu, il me reste à pouvoir charger correctement les images des pages, une idée?
Voici le code tel quel à l'heure actuelle :

Code : Tout sélectionner

#Server = 42
#Port = 1946

Declare HTMLRequestProvider(Request$)
Declare URLtoFile(RootPath$,URL$)

Global gFileLen

Structure HTML_REQUEST
  Method.s
  File.s
  ProtocolVersion.s
EndStructure

Structure REQUEST
  Req.HTML_REQUEST
  Sender.s
  BrowserInfos.s
EndStructure

OpenConsole("Serveur Web PureServer v0.1")
ConsoleColor(0,15)
PrintN("                    Local WebServer v 0.1b                    ")
ConsoleColor(15,0)

If Not InitNetwork() 
  MessageRequester("Serveur local","Erreur fatale : impossible d'initialiser le réseau. Vérifiez le WebKitGTK.") : End
EndIf


If CreateNetworkServer(#Server,#Port)
  PrintN("Server running on port : "+#Port)
  ;blabla de merde ici
  Repeat
    event = NetworkServerEvent(#Server)
    Select event
      Case #PB_NetworkEvent_Connect
        PrintN(FormatDate("[%hh:%ii:%ss - %dd/%mm/%yyyy]",Date())+" New client connected :"+Str(EventClient()))
      Case #PB_NetworkEvent_Data
        ClientID = EventClient()
        ClientIP = GetClientIP(ClientID)
        
        PrintN(FormatDate("[%hh:%ii:%ss - %dd/%mm/%yyyy]",Date())+" IP : "+IPString(ClientIP)+" - Client has sent a packet.")
        PrintN("Receiving datas...")
        ConsoleColor(7,0)
        
        *Buffer = AllocateMemory(1024)
        If Not *Buffer : Debug "erreur" : EndIf
        ReceiveNetworkData(ClientID,*Buffer,1024)
        Request$ = PeekS(*Buffer,1024,#PB_UTF8)
        ;*ptr_Requset_ASCII = Ascii(Request$)
        PrintN(Request$)
        
     
        *ptr_Result =  HTMLRequestProvider(Request$)
        
        If *ptr_Result
          ConsoleColor(0,7)
          PrintN("=======================Sended file : ==============================")
          ConsoleColor(7,0)
          Print(PeekS(*ptr_Result,-1,#PB_UTF8))
        
          SendNetworkData(ClientID,*ptr_Result,gFileLen)
          
          ConsoleColor(0,7)
          PrintN("===================================================================")
          ConsoleColor(7,0)
        Else
          PrintN("404 file not found.")
        EndIf
        
        ConsoleColor(15,0)
        CloseNetworkConnection(ClientID)
    EndSelect
  ForEver
  
Else
  MessageRequester("Serveur local","Erreur ! Impossible de créer le serveur Web sur le port "+#Port+".",#PB_MessageRequester_Error)
EndIf


;-Procédures

Procedure HTMLRequestProvider(Request$)
  Protected Request.REQUEST
  For i=1 To CountString(Request$,#LF$)
    Debug StringField(Request$,i,#LF$)
    
  Next
  HTMLRequest$ = StringField(Request$,1,#LF$)
  Request\Sender = StringField(Request$,2,#LF$)
  Request\BrowserInfos = StringField(Request$,3,#LF$)
  
  Request\Req\Method = StringField(HTMLRequest$,1," ")
  Request\Req\File = StringField(HTMLRequest$,2," ")
  Request\Req\ProtocolVersion = StringField(HTMLRequest$,3," ")
  
  ProcedureReturn URLtoFile("www",Request\Req\File)
EndProcedure

Procedure.s GetDate()
  ;Wed, 07 Aug 1996 11:15:43
  Hour$ = FormatDate("%hh:%ii:%ss",Date())
  Year$ = Str(Year(Date()))
  DayOfMonth$ = Str(Day(Date()))
  
  Select DayOfWeek(Date())
    Case 0
      DayOfWeek$ = "Sun"
    Case 0
      DayOfWeek$ = "Mon"
    Case 0
      DayOfWeek$ = "Tue"
    Case 0
      DayOfWeek$ = "Wed"
    Case 0
      DayOfWeek$ = "Thu"
    Case 0
      DayOfWeek$ = "Fri"
    Case 0
      DayOfWeek$ = "Sat"
  EndSelect
  
  Select Month(Date())
    Case 1
      Month$ = "Jan"
    Case 1
      Month$ = "Feb"
    Case 1
      Month$ = "Mar"
    Case 1
      Month$ = "Apr"
    Case 1
      Month$ = "May"
    Case 1
      Month$ = "Jun"
    Case 1
      Month$ = "Jul"
    Case 1
      Month$ = "Aug"
    Case 1
      Month$ = "Sep"
    Case 1
      Month$ = "Oct"
    Case 1
      Month$ = "Nov"
    Case 1
      Month$ = "Dec"
  EndSelect
                                                                    
  ProcedureReturn DayOfWeek$ + ", " + DayOfMonth$ + " " + Month$ + " " + Year$ + " " + Hour$
EndProcedure

Procedure URLtoFile(RootPath$, URL$)
;  ReplaceString(URL$,"/","\",#PB_String_InPlace)
  File = ReadFile(#PB_Any,RootPath$+URL$,#PB_File_SharedRead | #PB_UTF8)
  If File
    gFileLen = Lof(File)
    *FileBuffer = AllocateMemory(gFileLen)
    If *FileBuffer
      ReadData(File,*FileBuffer,gFileLen)
    EndIf
    CloseFile(File)
    
    filecontent$ = PeekS(*FileBuffer,gFileLen,#PB_UTF8)
    Debug "Mémoire fichier : "+filecontent$
    FreeMemory(*FileBuffer)
    
    Select Right(URL$,4)
      Case ".gif"
        ContentType$ = "image/gif"
        
      Case ".jpg"
        ContentType$ = "image/jpeg"
        
      Case ".png"
        ContentType$ = "image/png"
        
      Case ".txt"
        ContentType$ = "text/plain"
        
      Case ".zip"
        ContentType$ = "application/zip"
        
      Default
        ContentType$ = "text/html"
        
    EndSelect
        
    
    header$ = "HTTP/1.1 200 OK" + #CRLF$+
              "Date: "+GetDate()+"GMT" + #CRLF$+
              "Server: PureServer v0.0"  + #CRLF$+
              "Content-Length: "+Str(Len(filecontent$)) + #CRLF$+
              "Content-Type: "+ContentType$ + #CRLF$ + #CRLF$
    final$ = header$ + filecontent$
    ;gFileLen = Len(final$)
    
    *Document = AllocateMemory(gFileLen)
    PokeS(*Document,final$,gFileLen,#PB_UTF8)
    
    ProcedureReturn *Document
  Else
    ProcedureReturn 0
  EndIf
EndProcedure
Merci d'avance :P

Edit : Oui, cette page est affreusement bordélique, de même que ce code, mais quand je sature, je fais du sale :o
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: [Re OK]Probléme de serveur Web impossible...

Message par Zorro »

pourquoi tu repetes

Case 0
case 0
case 0 ....etc ???

pareil pour "Case1"
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: [Re OK]Probléme de serveur Web impossible...

Message par Marc56 »

Profite de la fonction PB StringField
https://www.purebasic.com/french/docume ... field.html
(C'est l’équivalent de la fonction d'autres langages, notamment Perl split)

Code : Tout sélectionner

DayOfWeek$ = StringField("Sun,Mon,Tue,Wed,Thu,Fri,Sat", DayOfWeek(Date()) + 1, ",")

Month$ = StringField("Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec", Month(Date()), ",")
42 lignes de code remplacées par seulement 2 8)

(À mettre de côté dans les modèles de code)

:wink:
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: [Re OK]Probléme de serveur Web impossible...

Message par Ar-S »

+1 Dobro (ça sent le copier/coller ^^)
+1 Marc
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Re: [Re OK]Probléme de serveur Web impossible...

Message par JohnJohnsonSHERMAN »

  • Il n'y a plus de bugs, le code présenté est une horreur pas à jour (notamment les index des jours et des mois sont corrigés depuis hier)...et oui c'est du copier-coller... Je vais pas m'amuser à écrire la même chose à la main 12 fois non? :mrgreen:
  • Merci Marc pour cet éclat de génie !!! J'aurais jamais pensé à utiliser cette fonction pour ca !! Je retiens ! :P 8)
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: [Re OK]Probléme de serveur Web impossible...

Message par Ar-S »

Ce serait bien de proposer les codes en version corrigé en éditant le code concerné.
ça évite que les visiteurs ne tombent sur des codes daubés lors d'une recherche. :wink:
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Re: [Re OK]Probléme de serveur Web impossible...

Message par JohnJohnsonSHERMAN »

Code du premier post mis à jour tel qu'il fonctionne actuellement 8)
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: [Re OK]Probléme de serveur Web impossible...

Message par Ar-S »

Image
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Re: [Re OK]Probléme de serveur Web impossible...

Message par poshu »

mais... euh... atomic web server?
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Re: [Re OK]Probléme de serveur Web impossible...

Message par JohnJohnsonSHERMAN »

Non ce n'est pas l'Atomic des exemples de PB :) Soit dit au passage, ce dernier ne marche pas avec la derniére version de PB (5.50)
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Re: [Re OK]Probléme de serveur Web impossible...

Message par poshu »

ouais, je sais que c'est pas lui, je demande justement pourquoi tu l'as pas utilisé... Il est juste pas compatible unicode, y'a quelques lignes à corriger et il fonctionne (même si c'est vrai qu'un exemple qui marche pas, c'est pas classe)
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: [Re OK]Probléme de serveur Web impossible...

Message par falsam »

Atomic Web Serveur.pb fonctionne en mode unicode (PB 5.43 LTS & PB 5.51) en activant le flag #PB_UTF8 à chaque manipulation mémoire PeekS() et PokeS().

Code : Tout sélectionner

a$ = PeekS(*Buffer)
est remplacer par

Code : Tout sélectionner

a$ = PeekS(*Buffer, -1, #PB_UTF8)
De la même manière, la procédure BuildRequestHeade() est remplacée par

Code : Tout sélectionner

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

  Length = PokeS(*Buffer, "HTTP/1.1 200 OK" + #CRLF$, -1, #PB_UTF8)                     : *Buffer+Length
  Length = PokeS(*Buffer, "Date: Wed, 07 Aug 1996 11:15:43 GMT" + #CRLF$, -1, #PB_UTF8) : *Buffer+Length
  Length = PokeS(*Buffer, "Server: Atomic Web Server 0.2b" + #CRLF$, -1, #PB_UTF8)      : *Buffer+Length
  Length = PokeS(*Buffer, "Content-Length: "+Str(DataLength) + #CRLF$, -1, #PB_UTF8)    : *Buffer+Length
  Length = PokeS(*Buffer, "Content-Type: "+ContentType$ + #CRLF$, -1, #PB_UTF8)         : *Buffer+Length
  Length = PokeS(*Buffer, #CRLF$, -1, #PB_UTF8)                                         : *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
Dans un autre sujet et sur la base du code source Atomic Serveur, Je vous montrerais une méthode pour envoyer des données à des pages HTML depuis un serveur Atomic Web Server.
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%
Avatar de l’utilisateur
JohnJohnsonSHERMAN
Messages : 648
Inscription : dim. 13/déc./2015 11:05
Localisation : Allez, cherche...
Contact :

Re: [Re OK]Probléme de serveur Web impossible...

Message par JohnJohnsonSHERMAN »

Merci ca résoud bien le probléme :)
"Le bug se situe entre la chaise et le clavier"
Votre expert national en bogage et segfaults.

CPU : AMD A8 Quad core - RAM 8Gb - HDD 2To
  • Windows 10 x64 - PB 5.61 x64
  • Linux Ubuntu 16.04 LTS x64 (dual boot) - PB pas encore réinstallé
Répondre