problème avec une applie serveur

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

problème avec une applie serveur

Message par gansta93 »

Bonjour,

je voudrais faire un serveur avec une fenêtre pour pouvoir le fermer mais le problème c'est que le serveur ne répond pas aux requettes.

Code : Tout sélectionner

;- Window Constants
;
Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Button_0
EndEnumeration


Procedure Open_Window_0()
  If OpenWindow(#Window_0, 0, 0, 202 , 65 , #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #pb_window_maximizegadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered , "Serveur")
    If CreateGadgetList(WindowID())
      ButtonGadget(#Button_0, 30, 10, 100, 20, "Quitter le serveur")
          EndIf
StatusBarText(0,0,"Serveur prait :-)",#pb_statusBar_center)
  EndIf
EndProcedure

Procedure prand(client)

buffer=AllocateMemory(1000)
ReceiveNetworkData(client,buffer,8)
datanet$=PeekS(buffer)
ProcedureReturn datanet$

EndProcedure

If InitNetwork()
If CreateNetworkServer(22021987)
Open_Window_0()
Repeat
Select WindowEvent()
Case #PB_EventGadget
Select EventGadgetID()
Case #Button_0
quit=1
EndSelect
Case #PB_Event_CloseWindow
 quit=1
EndSelect
evenement=NetworkServerEvent()
If evenement

id=NetworkClientID()

Select evenement
Case 1 ; Nouveau client
MessageRequester("Information","Nouveau client connecté.",#mb_ok|#mb_iconstop)
Case 2 ; Information ressue
Select prand(id)
Case "ouvcdrom"
If InitCDAudio()
EjectCDAudio(1)
Else
SendNetworkString(id,"nocdaudi")
EndIf
Case "fercdrom"
If InitCDAudio()
EjectCDAudio(0)
Else
SendNetworkString(id,"nocdaudi")
EndIf
Case "playson"
If InitSound()
If LoadSound(0,Env("%windir%\media\tada.wav"))
PlaySound(0)
Delay(2000)
PlaySound(0)
Delay(2000)
FreeSound(0)
Else
SendNetworkString(id,"soundnol")
EndIf
Else
SendNetworkString(id,"nosocard")
EndIf
Case "bouh_box"
MessageRequester("Bouh!","Tu vas fliper mon vieu!",#mb_ok|#mb_iconstop)
EndSelect
Case 3 ; Fichier envoyé
fichier$=Str(id)+" "+Str(Random(2202))+" "+Str(Random(2202))+".txtt"
ReceiveNetworkFile(id,fichier$)
MessageRequester("Fichier ressu","Vous venez de recevoir le fichier "+fichier$+"."+#crlf+"Avant de l'ouvrire, analysez-le pour éviter toute infection virale.",#mb_ok|#mb_iconasterisk)
Case 4 ; Client déconnecté
MessageRequester("Information","Le client "+Str(id)+" vien de se déconnecter.",#mb_ok|#mb_iconasterisk)
EndSelect
EndIf
Delay(20)
Until quit=1
CloseNetworkServer()
CloseWindow(#Window_0)
End
Else
MessageRequester("Erreur","Impossible d'ouvrire le port car il est peut-être en cour d'utilisation.",#mb_ok|#mb_iconstop)
EndIf
Else
MessageRequester("Erreur","Impossible d'initialiser le réseau.",#mb_ok|#mb_iconstop)
EndIf
End
Merci d'avance... j'aimerais bien comprendre pourquoi il ne répond pas aux requettes.
Heis Spiter
Messages : 1092
Inscription : mer. 28/janv./2004 16:22
Localisation : 76
Contact :

Message par Heis Spiter »

Code : Tout sélectionner

;- Window Constants 
; 
Enumeration 
  #Window_0 
EndEnumeration 

;- Gadget Constants 
; 
Enumeration 
  #Button_0 
EndEnumeration 

#crlf = Chr(13)+Chr(10)

Procedure Open_Window_0() 
  If OpenWindow(#Window_0, 0, 0, 202 , 65 , #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #pb_window_maximizegadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered , "Serveur") 
    If CreateGadgetList(WindowID()) 
      ButtonGadget(#Button_0, 30, 10, 100, 20, "Quitter le serveur") 
    EndIf 
    If CreateStatusBar(0, WindowID())
      AddStatusBarField(202)
    EndIf
    StatusBarText(0,0,"Serveur prêt :-)",#pb_statusBar_center) 
  EndIf 
EndProcedure

Procedure prand(client) 

  buffer=AllocateMemory(1000) 
  ReceiveNetworkData(client,buffer,8) 
  datanet$=PeekS(buffer) 
  ProcedureReturn datanet$ 

EndProcedure 

If InitNetwork() 
  If CreateNetworkServer(21987) 
    Open_Window_0() 
    Repeat 
      Select WindowEvent() 
        Case #PB_EventGadget 
        Select EventGadgetID() 
          Case #Button_0 
          quit=1 
        EndSelect 
        Case #PB_Event_CloseWindow 
          quit=1 
      EndSelect 
      evenement = NetworkServerEvent() 
      If evenement 
        id = NetworkClientID() 
        Select evenement 
          Case 1 ; Nouveau client 
            MessageRequester("Information","Nouveau client connecté.",#mb_ok|#mb_iconstop) 
          Case 2 ; Information ressue 
            Select prand(id) 
              Case "ouvcdrom" 
                If InitCDAudio() 
                  EjectCDAudio(1) 
                Else 
                  SendNetworkString(id,"nocdaudi") 
                EndIf 
              Case "fercdrom" 
                If InitCDAudio() 
                  EjectCDAudio(0) 
                Else 
                  SendNetworkString(id,"nocdaudi") 
                EndIf 
              Case "playson" 
                If InitSound() 
                  If LoadSound(0, "%windir%\media\tada.wav") 
                    PlaySound(0) 
                    Delay(2000) 
                    PlaySound(0) 
                    Delay(2000) 
                    FreeSound(0) 
                  Else 
                    SendNetworkString(id,"soundnol") 
                  EndIf 
                Else 
                  SendNetworkString(id,"nosocard") 
                EndIf 
              Case "bouh_box" 
                MessageRequester("Bouh!","Tu vas fliper mon vieux !",#mb_ok|#mb_iconstop) 
            EndSelect 
          Case 3 ; Fichier envoyé 
            fichier$=Str(id)+" "+Str(Random(2202))+" "+Str(Random(2202))+".txtt" 
            ReceiveNetworkFile(id,fichier$) 
            MessageRequester("Fichier ressu","Vous venez de recevoir le fichier "+fichier$+"."+#crlf+"Avant de l'ouvrire, analysez-le pour éviter toute infection virale.",#mb_ok|#mb_iconasterisk) 
          Case 4 ; Client déconnecté 
            MessageRequester("Information","Le client "+Str(id)+" vient de se déconnecter.",#mb_ok|#mb_iconasterisk) 
        EndSelect 
      EndIf 
      Delay(20) 
    Until quit=1 
    CloseNetworkServer() 
    CloseWindow(#Window_0) 
    End 
  Else 
    MessageRequester("Erreur","Impossible d'ouvrire le port car il est peut-être en cour d'utilisation.",#mb_ok|#mb_iconstop) 
  EndIf 
Else 
  MessageRequester("Erreur","Impossible d'initialiser le réseau.",#mb_ok|#mb_iconstop) 
EndIf 
End 
Qu'ais-je fait ?
- Une mise en forme du code (TRES IMPORTANT)
- Créé la barre de status que tu utilse sans l'avoir créée.
- Déclaré la constante #crlf comme je pense que tu voulais qu'elle soit.
- Supprimé la fonction env() (A quoi servait-ellle ?)
- Mis un port moins important.
- Corrigé 2 fautes d'orthographe.
Normalement tout marche maintenant (d'après mes rapides tests).
Heis Spiter, webmaster du site http://www.heisspiter.net
Développeur principal et administrateur du projet Bird Chat
Parti courir au bonheur du dév. public et GPL :D
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Message par gansta93 »

Salut,

La fonction env() sert à extraire une variable d'environemant... une lib perso... et le #crlf est déjà deffini dans un resident... merci je vais tester ça... mais ça venait d'où le fait que ça ne répondait pas?
Heis Spiter
Messages : 1092
Inscription : mer. 28/janv./2004 16:22
Localisation : 76
Contact :

Message par Heis Spiter »

Oki, :) . Alors, si ca ne répondait pas, c'est car l'application était stoppé dès le début, puisque tu utilisais une barre de status non créée.
Heis Spiter, webmaster du site http://www.heisspiter.net
Développeur principal et administrateur du projet Bird Chat
Parti courir au bonheur du dév. public et GPL :D
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Message par gansta93 »

Re,

J'ai corriger la barre de statut... mais le client que voici ne provoque aucune réponse du serveur appart à la connection et à la déconnection.

Code : Tout sélectionner

If InitNetwork()
id=OpenNetworkConnection("localhost",22287)
If id
SendNetworkString(id,"playson")
Delay(4000)
SendNetworkString(id,"ouvcdrom")
Delay(4000)
SendNetworkString(id,"bouh_box")
Delay(4000)
CloseNetworkConnection(id)
EndIf
EndIf
End
J'ai voulu faire un client tout simple, c'est pourquoi je n'ai pas voulu mettre les éventuelles réponses du serveur car je sais qu'il ne doit y avoir aucun problème lors de l'initialisation du son ou du CDROM et puis pour un requester qui doit être fait par le serveur, rien à initialiser.
Pour les fichiers, j'ai essayé, ça marche bien bien en générant des nombres aléatoirs comme il le faut appart que ça devait être txt mais j'ai corrigé et ça marche... mais je ne comprand pas pourquoi ça ne répond pas aux requettes au niveau du serveur.
Heis Spiter
Messages : 1092
Inscription : mer. 28/janv./2004 16:22
Localisation : 76
Contact :

Message par Heis Spiter »

Code : Tout sélectionner

;- Window Constants 
; 
Enumeration 
  #Window_0 
EndEnumeration 

;- Gadget Constants 
; 
Enumeration 
  #Button_0 
EndEnumeration 

#crlf = Chr(13)+Chr(10) 

Procedure Open_Window_0() 
  If OpenWindow(#Window_0, 0, 0, 202 , 65 , #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #pb_window_maximizegadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered , "Serveur") 
    If CreateGadgetList(WindowID()) 
      ButtonGadget(#Button_0, 30, 10, 100, 20, "Quitter le serveur") 
    EndIf 
    If CreateStatusBar(0, WindowID()) 
      AddStatusBarField(202) 
    EndIf 
    StatusBarText(0,0,"Serveur prêt :-)",#pb_statusBar_center) 
  EndIf 
EndProcedure 

If InitNetwork() 
  If CreateNetworkServer(21987) 
    Open_Window_0() 
    Repeat 
      Select WindowEvent() 
        Case #PB_EventGadget 
        Select EventGadgetID() 
          Case #Button_0 
          quit=1 
        EndSelect 
        Case #PB_Event_CloseWindow 
          quit=1 
      EndSelect 
      evenement = NetworkServerEvent()
      If evenement 
        FreeMemory(*Buffer)
        *Buffer = AllocateMemory(1000)
        id = NetworkClientID() 
        Select evenement 
          Case 1 ; Nouveau client 
            MessageRequester("Information","Nouveau client connecté.",#mb_ok|#mb_iconstop) 
          Case 2 ; Information ressue 
            ReceiveNetworkData(id, *buffer,1000) 
            datanet$ = PeekS(*buffer) 
            Select datanet$ 
              Case "ouvcdrom" 
                If InitCDAudio() 
                  EjectCDAudio(1) 
                Else 
                  SendNetworkString(id,"nocdaudi") 
                EndIf 
              Case "fercdrom" 
                If InitCDAudio() 
                  EjectCDAudio(0) 
                Else 
                  SendNetworkString(id,"nocdaudi") 
                EndIf 
              Case "playson" 
                If InitSound() 
                  If LoadSound(0, "%windir%\media\tada.wav") 
                    PlaySound(0) 
                    Delay(2000) 
                    PlaySound(0) 
                    Delay(2000) 
                    FreeSound(0) 
                  Else 
                    SendNetworkString(id,"soundnol") 
                  EndIf 
                Else 
                  SendNetworkString(id,"nosocard") 
                EndIf 
              Case "bouh_box" 
                MessageRequester("Bouh!","Tu vas fliper mon vieux !",#mb_ok|#mb_iconstop) 
            EndSelect 
          Case 3 ; Fichier envoyé 
            fichier$=Str(id)+" "+Str(Random(2202))+" "+Str(Random(2202))+".txtt" 
            ReceiveNetworkFile(id,fichier$) 
            MessageRequester("Fichier ressu","Vous venez de recevoir le fichier "+fichier$+"."+#crlf+"Avant de l'ouvrire, analysez-le pour éviter toute infection virale.",#mb_ok|#mb_iconasterisk) 
          Case 4 ; Client déconnecté 
            MessageRequester("Information","Le client "+Str(id)+" vient de se déconnecter.",#mb_ok|#mb_iconasterisk) 
        EndSelect 
      EndIf 
      Delay(20) 
    Until quit=1 
    CloseNetworkServer() 
    CloseWindow(#Window_0) 
    End 
  Else 
    MessageRequester("Erreur","Impossible d'ouvrire le port car il est peut-être en cour d'utilisation.",#mb_ok|#mb_iconstop) 
  EndIf 
Else 
  MessageRequester("Erreur","Impossible d'initialiser le réseau.",#mb_ok|#mb_iconstop) 
EndIf 
End 
Cela venait de ta fonction prand(). Il a suffit de la supprimer et de faire le même chose au bon endroit dans le serveur et ca marche ;)
Heis Spiter, webmaster du site http://www.heisspiter.net
Développeur principal et administrateur du projet Bird Chat
Parti courir au bonheur du dév. public et GPL :D
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Message par gansta93 »

Merci beaucoup, ça marche!
Je croi que ma fonction ne marchait pas peut-être parce que je n'avais pas mis *buffer mais tout simplemant buffer. Pourquoi mait-on le *? certe une question de boullet, mais au moin je le serait un peiti moins une foie que je saurais ça :-).
Heis Spiter
Messages : 1092
Inscription : mer. 28/janv./2004 16:22
Localisation : 76
Contact :

Message par Heis Spiter »

J'avais essayé en mettant l'astérisque. Mais cela n'avait pas marché. Pour pourquoi on en met, c'est pour montrer que c'est un buffer. Mais je crois que certains n'en mettent pas...
Heis Spiter, webmaster du site http://www.heisspiter.net
Développeur principal et administrateur du projet Bird Chat
Parti courir au bonheur du dév. public et GPL :D
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Selon l'aide, * désigne un pointeur, c'est à dire une variablede type long, destinée à contenir l'adresse d'une variable, et pas sa valeur

Code : Tout sélectionner

*Buffer = AllocateMemory(2) ; Alloue une zone mémoire de 2 octets
PokeW(*Buffer, 32000)         ; Ecrit une valeur dans la zone mémoire
Buffer = PeekW(*Buffer)     ; Récupère la valeur pour la mettre dans une variable

Debug *Buffer               ; Retourne l'adresse de la zone mémoire
Debug Buffer                ; Retourne la valeur de la variable
En résumé, *Buffer et Buffer sont deux variables différentes.

Et si j'ai dit une connerie, n'hésitez pas. FRAPPEZ FORT. (mais pas sur le tête) :lol:
Répondre