Page 1 sur 1

[lib Network] probleme de receptioon

Publié : dim. 09/avr./2006 13:47
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