[lib Network] probleme de receptioon

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
scaraber
Messages : 362
Inscription : ven. 15/juil./2005 17:32

[lib Network] probleme de receptioon

Message par scaraber »

Salut alore voila je fait des test reseau et j'ai un probleme de reception des données par le client voici mes deux code savez vous dou viens le probleme ? le request message totoc est ce qui est recu par le client
et toto ce qui est envoyer

A+
scaraber


*********************************************************
* Le Serveur *
*********************************************************


;Déclaration des variables globales
InitNetwork () ; initialisation de la bilbiothèque du réseau
Global x, y, mode.s, IP.s, cnxID,clicli,clie,messg$,packet2.s
Declare Recievedata()
Declare Senddata()
Dim msg.s(1,15)
Dim pos(6,50)
clicli=2
nbm=1
nbd=1
port=22
ssbloc.s= ""
Port = Val ( InputRequester ( "port" , "choissiser le port du server" , "22" ))
CreateNetworkServer (Port)

Enumeration
   #Button_0
   #Listview_0
EndEnumeration


If OpenWindow (0, 216, 0, 350, 150, #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "Server" )
   If CreateGadgetList ( WindowID ())
     ButtonGadget ( #Button_0 , 250, 80, 80, 60, "areter le serveur" , #PB_Button_MultiLine )
     ListViewGadget ( #Listview_0 , 10, 10, 230, 130)
   EndIf
EndIf

Delay (100)
Repeat

   If bloc = 0
     Gosub Recievedata
   EndIf
  
   If SEvent = 1
    msg(1,nbm)= "un client vient de ce conecter"
    nbm=nbm+1
   EndIf
  
   If SEvent = 4
    msg(1,nbm)= "un client vient de ce déconecter"
    nbm=nbm+1
   EndIf
    
   Gosub readdata
   Gosub SendClientData

   Delay (10)
  winev= WindowEvent ()

  EventID = WaitWindowEvent ()

Until EventID = #PB_Event_CloseWindow
Gosub fin


;***************************************************
;* Gosub et Procedure *
;***************************************************

SendClientData:
;********************************************************************************
;* envoyer des doner au client *
;********************************************************************************
   For clie=1 To clicli
     If pos(6,clie)=1
       For clien=1 To clicli
         If pos(6,clien)=1
           For nbd=1 To 110
             If nbo<nbm
              nbo=nbd
              packet3.s = msg(1,nbo)+ "#"
               SendNetworkData (clien,@packet3, Len (packet3))
               MessageRequester ( "toto" ,packet3, #PB_MessageRequester_Ok )
             EndIf
           Next
         EndIf
       Next clien
     EndIf
   Next clie

Return

Recievedata:
;********************************************************************************
;* Lit les doner recu *
;********************************************************************************


SEvent = NetworkServerEvent () ; vérifie si des packets IP ont été recus
    
    
     If SEvent = 2 ; (2 = réception de données brutes)
      
       ;Récupération de l'ID client
      clientID = NetworkClientID ()
     
      
       ;SI il y a un client en plus ALORS on augmente la taille du tableau pour sauvegarder ces donner
       If clientID>clicli
        clicli=ClientID
         Dim pos(6,ClientID)
       EndIf
      pos(6,ClientID)=1
      
       ;Alloue 512 octets dans la mémoire pour le buffer de réception
      *buffer = AllocateMemory (512)
      
       ;Récupère les données recues, et les place dans le buffer
       ReceiveNetworkData (clientID, *buffer, 500)
      
       ;Renvoie dans la varaible 'packet' la chaine contenue dans le buffer
      packet.s = PeekS (*buffer, MemoryStringLength (*buffer))
      
       ;Compte le nombre de bloc de coordonnées
      bloc = CountString (packet, "#" )
      
       ;Supprime le buffer
       FreeMemory (*buffer)
     EndIf
Return

Readdata:
;********************************************************************************
;* Met dans des variables les donner recu *
;********************************************************************************
   If bloc > 0
     For k=1 To bloc
      ssbloc = StringField (packet,k, "#" )
      msg(1,nbm)= StringField (ssbloc,1, ";" )
       AddGadgetItem ( #Listview_0 ,-1,msg(1,nbm))
      nbm=nbm+1
      pos(6,ClientID)= Val ( StringField (ssbloc,2, ";" ))
     Next
    bloc=0
   EndIf

nbb:
   If nbm>100
    nbm=nbm-1
     If nbm<100
     For d=1 To 100
      msg(1,d)=msg(1,d+1)
     Next
     Gosub nbb
     EndIf
   EndIf
  
Return

fin:
   CloseNetworkServer ()
   End
Return

Procedure Recievedata()
EndProcedure

Procedure Senddata()
EndProcedure




*********************************************************
* Le client *
*********************************************************


; PureBasic Visual Designer v3.90 build 1361
Dim msg.s(1,1500)
Global IP.s, cnxID ,message$

InitNetwork () ; initialisation de la bilbiothèque du réseau mode = "-client"
IP = InputRequester ( "ip" , "choissiser l'ip du server" , "127.0.0.1" )
Port = Val ( InputRequester ( "port" , "choissiser le port du server" , "22" ))
Pseudo.s = InputRequester ( "Pseudo" , "choissiser votre pseudo" , "2" )
cnxID = OpenNetworkConnection (IP,port)
;si la connexion ne s'est pas faite, alors afficher le message suivant :
   If cnxID = 0
     MessageRequester ( "Erreur" , "Serveur " +IP+ " introuvable !" , #PB_MessageRequester_Ok )
     End
   EndIf


;- Window Constants
;
Enumeration
   #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
   #String_0
   #Button_0
   #Listview_0
   #Listview_1
EndEnumeration



   If OpenWindow ( #Window_0 , 216, 0, 600, 444, #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "New window ( 0 )" )
     If CreateGadgetList ( WindowID ())
       StringGadget ( #String_0 , 20, 390, 480, 20, "" )
       ButtonGadget ( #Button_0 , 510, 390, 80, 20, "" )
       ListViewGadget ( #Listview_0 , 450, 40, 140, 230)
       ListViewGadget ( #Listview_1 , 20, 40, 420, 330)
      
     EndIf
   EndIf


ssbloc.s= ""




Repeat

    If bloc = 0
     Gosub Recievedata
    EndIf
    Gosub Readdata
    Gosub SendServerData


Until EventID = #PB_Event_CloseWindow : Gosub fin





;***************************************************
;* Gosub et Procedure *
;***************************************************

fin:
   CloseNetworkConnection (cnxID)
   End
Return

SendServerData:
;********************************************************************************
;* envoyer des doner au Serveur *
;********************************************************************************
 
  EventID = WaitWindowEvent ()
   If EventID = #PB_EventGadget
     Select EventGadgetID ()
       Case #Button_0
        tos$= GetGadgetText ( #String_0 )
        mssg$=Pseudo+ ":" +tos$
        packet2.s = mssg$+ ";" + "1" + "#"
         SendNetworkData (cnxID,@packet2, Len (packet2))
         SetGadgetText ( #String_0 , "" )
     EndSelect
   EndIf
  
Return

Recievedata:
;********************************************************************************
;* Lit les doner recu *
;********************************************************************************

    SEvent = NetworkClientEvent (cnxID) ; vérifie si des packets IP ont été recus

     If SEvent = 2 ; (2 = réception de données brutes)
           
       ;Alloue 512 octets dans la mémoire pour le buffer de réception
      *buffer = AllocateMemory (512)
      
       ;Récupère les données recues, et les place dans le buffer
       ReceiveNetworkData (cnxID, *buffer, 500)
      
       ;Renvoie dans la varaible 'packet' la chaine contenue dans le buffer
      packet.s = PeekS (*buffer, MemoryStringLength (*buffer))
      
       ;Compte le nombre de bloc de coordonnées
      bloc = CountString (packet, "#" )
      
       ;Supprime le buffer
       FreeMemory (*buffer)
     EndIf


Return

Readdata:
;********************************************************************************
;* Met dans des variables les donner recu *
;********************************************************************************
    
   If bloc > 0
     For k=1 To bloc
      msg(1,nbm) = StringField (ssbloc,1, ";" )
       MessageRequester ( "totoc" ,ssbloc, #PB_MessageRequester_Ok )
      msgp$= RTrim (msg(1,nbm))
       If msgp$= ""
       Else
         AddGadgetItem ( #Listview_1 ,-1,msg(1,nbm))
        nbm=nbm+1
       EndIf
     Next
    bloc=0 ; une fois la boucle terminée -> réinitialisation du compteur de blocs à 0
   EndIf
  

   If nbm=14
    nbm=nbm-1
     For d=1 To 14
      msg(1,d)=msg(1,d+1)
     Next
   EndIf
      
Return


Procedure Recievedata()
EndProcedure

Procedure Senddata()
EndProcedure