Une âme charritable pour corriger mon code ?

Programmation d'applications complexes
eRz0r
Messages : 30
Inscription : ven. 14/janv./2005 17:42

Une âme charritable pour corriger mon code ?

Message par eRz0r »

Salut, en fait je me suis lancé dans l'idée de codé une sorte de petit chat entre un client et un serveur.

Alors voila ce qu'il se passe:

Quand je lance le serveur et que je clique sur CREER le serveur se cree bien.
Apres quand je lance le client et que je me connecte au port du serveur sous l'ip local par exemple, il me dit que mon client est bien connecté mais le serveur ne reçoit pas le message " un client s'est connecté ".

Enfin voilà le code donc si il y avait moyen qu'on me le corrige svp ? :roll:


CLIENT

Code : Tout sélectionner

; PureBasic Visual Designer v3.90 build 1360


;- Window Constants
;
Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Frame_connexion
  #Text_IP
  #input_ip_local
  #Text_port
  #input_port
  #B_connexion
  #Frame_etat
  #etat
  #Frame_communication
  #Text_msg_recu
  #msg_recu
  #Frame_traitement
  #Text_msg
  #input_msg
  #B_envoyer
EndEnumeration

InitNetwork()

ip$="127.0.0.1"
port=6832
msg$=""




  If OpenWindow(#Window_0, 216, 200, 260, 438,  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "Client")
    If CreateGadgetList(WindowID())
      Frame3DGadget(#Frame_connexion, 10, 10, 240, 70, " Connexion ")
      TextGadget(#Text_IP, 20, 30, 20, 20, "IP :")
      StringGadget(#input_ip_local, 20, 50, 80, 20, ip$)
      TextGadget(#Text_port, 110, 30, 40, 20, "PORT :")
      StringGadget(#input_port, 110, 50, 50, 20, Str(port))
      ButtonGadget(#B_connexion, 170, 50, 70, 20, "Connexion !")
      Frame3DGadget(#Frame_etat, 10, 90, 240, 50, " Etat de la connexion ")
      StringGadget(#etat, 20, 110, 220, 20, "Non connecté", #PB_String_ReadOnly)
      Frame3DGadget(#Frame_communication, 10, 150, 240, 120, " Communication ")
      TextGadget(#Text_msg_recu, 20, 170, 140, 20, "Dernier message reçu :")
      StringGadget(#msg_recu, 20, 190, 210, 60, "aucun message reçu", #PB_String_ReadOnly)
      Frame3DGadget(#Frame_traitement, 10, 280, 240, 120, " Traitement ")
      TextGadget(#Text_msg, 20, 300, 100, 20, "Ecrire un message :")
      StringGadget(#input_msg, 20, 320, 210, 40, msg$)
      ButtonGadget(#B_envoyer, 90, 370, 70, 20, "Envoyer")
      
    EndIf
  EndIf
  
Repeat 
            EventID.l= WaitWindowEvent () ; on récupère un évènement 
             Select EventID ; on sélectionne cet évènement 
                 Case #PB_EventGadget ; cet évènement concerne une action sur un Gadget 
                     Select EventGadgetID () ; dans ce cas, on récupère l'identifiant du gadget qui l'a créé 
                         Case #b_connexion ; on compare l'identifiant à #ButtonGadget 
                             
                             connectionID=OpenNetworkConnection(ip$, port)

                                If ConnectionID      
                                SetGadgetText(#etat, "Connecté !") 
                                ;SendNetworkString(ConnectionID, "Une personne s'est connecte sur votre serveur")
                                Else
                                etat_connexion$="Impossible de se connecter"
                                EndIf
                            
                         Case #B_envoyer
                         
                                SendNetworkString(ConnectionID, msg$)

                         
                         
                         ;Case #B_1024 ; on compare l'identifiant à #ButtonGadget 
                              ;game_1024()
                             
                     EndSelect 
                 Case #PB_Event_CloseWindow ; cet évènement concerne la fermeture de la fenêtre 
                    Quit=1 
                 CloseNetworkConnection(ConnectionID)    
             EndSelect 
               
         Until Quit=1 

SERVEUR

Code : Tout sélectionner

  #Frame_connexion
  #Status
  #Text_status
  #Text_traitement
  #msg
  #Frame_communication
  #Text_last_msg
  #last_msg
  #Frame_traitement
  #B_envoyer
  #Text_creer_serveur
  #port
  #B_creer
EndEnumeration

InitNetwork()

port=6832
Buffer = AllocateMemory(1000)



  If OpenWindow(#Window_0, 216, 200, 330, 368,  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "Serveur")
    If CreateGadgetList(WindowID())
      Frame3DGadget(#Frame_connexion, 10, 10, 310, 120, " Connexion ")
      TextGadget(#Text_creer_serveur, 20, 30, 150, 20, "Créer un serveur sous le port :")
      StringGadget(#port, 20, 50, 50, 20, Str(port))
      ButtonGadget(#B_creer, 80, 50, 80, 20, "Creer")
      StringGadget(#Status, 20, 100, 290, 20, "Aucun client de connecté en ce moment...", #PB_String_ReadOnly)
      TextGadget(#Text_status, 20, 80, 40, 20, "Status :")
      TextGadget(#Text_traitement, 20, 260, 120, 20, "Rédiger un message")
      StringGadget(#msg, 20, 280, 290, 20, "")
      Frame3DGadget(#Frame_communication, 10, 140, 310, 90, " Communication ")
      TextGadget(#Text_last_msg, 20, 160, 110, 20, "Dernier message reçu :")
      StringGadget(#last_msg, 20, 180, 290, 40, "aucun message reçu pour l'instant", #PB_String_ReadOnly)
      Frame3DGadget(#Frame_traitement, 10, 240, 310, 100, " Traitement ")
      ButtonGadget(#B_envoyer, 100, 310, 120, 20, "Envoyer")      
    EndIf
  EndIf



Repeat 

            EventID.l= WaitWindowEvent () ; on récupère un évènement 
             Select EventID ; on sélectionne cet évènement 
                 Case #PB_EventGadget ; cet évènement concerne une action sur un Gadget 
                     Select EventGadgetID () ; dans ce cas, on récupère l'identifiant du gadget qui l'a créé 
                         Case #b_creer ; on compare l'identifiant à #ButtonGadget 
                             
                            ;connexion_serveur()
                            If CreateNetworkServer(Port)
                            SetGadgetText(#status,"Le serveur a ete cree. PORT:"+Str(port))
                            
                              SEvent.l = NetworkServerEvent()
                              
                                If SEvent
                                
                                  ClientID = NetworkClientID()
                              
                                  Select SEvent
                                  
                                    Case 1

                                      SetGadgetText(#status, "Connexion etablie avec un client")
                              
                                    Case 2
                                      
                                      ;PrintN("Client "+Str(ClientID)+" has send a packet !")
                                      ReceiveNetworkData(ClientID, Buffer, 1000)
                                      SetGadgetText(#last_msg,PeekS(Buffer))
                                      
                                    
                                    Case 3
                                      MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has send a file via the network !", 0)
                                      ReceiveNetworkFile(ClientID, "C:\TEST_Network.ftp3")
                                      
                                      quit=1
                              
                                    Case 4
                                      
                                      SetGadgetText(#status,Str(ClientID)+" à fermé la connexion")

                                      
                                      quit=1
                                    CloseNetworkConnection(ConnectionID) 
                                  EndSelect
                                   
                                EndIf
                                 
                              Else

                          SetGadgetText(#status,"Impossible de créer le serveur")

                          EndIf
                            
                     EndSelect 
                 Case #PB_Event_CloseWindow ; cet évènement concerne la fermeture de la fenêtre 
                    Quit=1 
                   
             EndSelect 
             
             
         

         

               
   Until Quit=1 
         
   CloseNetworkServer()
Merci d'avance :)

eRz
Anonyme

Message par Anonyme »

J'avais fait un p'tit programme pour tester le client ou le serveur et ainsi déterminer les bugs.
je n'ai pas le temps de t'aider plus , mais le programme peut t'aider.

File:1->Diagnostic.rar
Image

@+
AWEAR
Messages : 264
Inscription : ven. 28/oct./2005 8:20
Localisation : Mayotte ( 976 ), Océan Indien, France

Message par AWEAR »

Le problème c'est ta boucle dans le server :

Code : Tout sélectionner

Repeat 

            EventID.l= WaitWindowEvent () ; on récupère un évènement 
             Select EventID ; on sélectionne cet évènement 
                 Case #PB_EventGadget ; cet évènement concerne une action sur un Gadget 
                     Select EventGadgetID () ; dans ce cas, on récupère l'identifiant du gadget qui l'a créé 
                         Case #b_creer ; on compare l'identifiant à #ButtonGadget 
                              
                            ;connexion_serveur() 
                            If CreateNetworkServer(Port) 
                            SetGadgetText(#status,"Le serveur a ete cree. PORT:"+Str(port)) 
                            
                              SEvent.l = NetworkServerEvent() 
                              
                                If SEvent 
                                
                                  ClientID = NetworkClientID() 
                              
                                  Select SEvent 
                                  
                                    Case 1 

                                      SetGadgetText(#status, "Connexion etablie avec un client") 
                              
                                    Case 2 
                                      
                                      ;PrintN("Client "+Str(ClientID)+" has send a packet !") 
                                      ReceiveNetworkData(ClientID, Buffer, 1000) 
                                      SetGadgetText(#last_msg,PeekS(Buffer)) 
                                      
                                    
                                    Case 3 
                                      MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has send a file via the network !", 0) 
                                      ReceiveNetworkFile(ClientID, "C:\TEST_Network.ftp3") 
                                      
                                      quit=1 
                              
                                    Case 4 
                                      
                                      SetGadgetText(#status,Str(ClientID)+" à fermé la connexion") 

                                      
                                      quit=1 
                                    CloseNetworkConnection(ConnectionID) 
                                  EndSelect 
                                    
                                EndIf 
                                  
                              Else 

                          SetGadgetText(#status,"Impossible de créer le serveur") 

                          EndIf 
                            
                     EndSelect 
                 Case #PB_Event_CloseWindow ; cet évènement concerne la fermeture de la fenêtre 
                    Quit=1 
                    
             EndSelect 
              
              
          

          

                
   Until Quit=1 
          
   CloseNetworkServer() 
La, on ne ressevra les evenement que si on clique sur le bouton créer
Il faudrait probablement faire un truc du genre :

Code : Tout sélectionner

Repeat 

            EventID.l= WaitWindowEvent () ; on récupère un évènement 
             Select EventID ; on sélectionne cet évènement 
                 Case #PB_EventGadget ; cet évènement concerne une action sur un Gadget 
                     Select EventGadgetID () ; dans ce cas, on récupère l'identifiant du gadget qui l'a créé 
                         Case #b_creer ; on compare l'identifiant à #ButtonGadget 
                              
                            ;connexion_serveur() 
                            If CreateNetworkServer(Port) 
                            SetGadgetText(#status,"Le serveur a ete cree. PORT:"+Str(port)) 
                            cre = 1
                           
                                  
                              Else 

                          SetGadgetText(#status,"Impossible de créer le serveur") 

                          EndIf 
                            
                     EndSelect 
                 Case #PB_Event_CloseWindow ; cet évènement concerne la fermeture de la fenêtre 
                    Quit=1 
                    
             EndSelect 
              
     if cre         
          SEvent.l = NetworkServerEvent() 
                              
                                If SEvent 
                                
                                  ClientID = NetworkClientID() 
                              
                                  Select SEvent 
                                  
                                    Case 1 

                                      SetGadgetText(#status, "Connexion etablie avec un client") 
                              
                                    Case 2 
                                      
                                      ;PrintN("Client "+Str(ClientID)+" has send a packet !") 
                                      ReceiveNetworkData(ClientID, Buffer, 1000) 
                                      SetGadgetText(#last_msg,PeekS(Buffer)) 
                                      
                                    
                                    Case 3 
                                      MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has send a file via the network !", 0) 
                                      ReceiveNetworkFile(ClientID, "C:\TEST_Network.ftp3") 
                                      
                                      quit=1 
                              
                                    Case 4 
                                      
                                      SetGadgetText(#status,Str(ClientID)+" à fermé la connexion") 

                                      
                                      quit=1 
                                    CloseNetworkConnection(ConnectionID) 
                                  EndSelect 
                                    
                                EndIf 

          

               endif 
   Until Quit=1 
          
   CloseNetworkServer() 
Ps : je n'ai pas tester car j'ai quelques petits problèmes avec les fonctions de la librairies network

[EDIT]

Je viens d'essayer, ca marche (lorsque le client se connecte en tout cas, après, j'ai pas essayé)
La vie est une rose dont il faut accepter les épines, mais la mienne est fannée, arrosée par le goût de mes larmes. (Soprano)
eRz0r
Messages : 30
Inscription : ven. 14/janv./2005 17:42

Message par eRz0r »

Ca marche merci bcp ;)

eRz
Répondre