salut
voila ce code est tres interesaant masi je l'est modifier un  petit peu pour ariver petit a petit a ce que je veux.Le code est loin d'etre bon je pence enfin sa lag encore un peu ... voila tout 
ajout:
-Gestion de deux client et plus 
 
edit 
Modif des code: 
-moins de lag 
-supresssion du caré quand deconexion
-numero du client id sur le caré
-choisir la couleur du cube (petit bug jai pas trrouver dou sa vien 
Le client
Code : Tout sélectionner
#WIN  = 0   ; ID de la fenêtre principale 
#COTE = 50  ; taille des côtés du carré 
#STEP = 2   ; nombre de pixels de déplacement par pas 
;Déclaration des variables globales 
Global x, y, mode.s, IP.s, cnxID ,red,green,blue
x = 0 ; initialisation de x 
y = 0 ; initialisation de y à 0 
mode = ProgramParameter() ; récupération du 1er paramètre de la ligne de commande 
IP   = ProgramParameter() ; récupération du 2eme paramètre... 
InitSprite()    ; initialisation de la bilbiothèque des sprites 
InitKeyboard()  ; initialisation de la bilbiothèque du clavier 
InitNetwork()   ; initialisation de la bilbiothèque du réseau 
port=22 ; Attribution du port 6666 au programme 
mode = "-client"
IP   = InputRequester("ip","choissiser l'ip du server","193.251.239.32")
Port = Val(InputRequester("port","choissiser le port du server","22"))
Color.l = ColorRequester()
red=Red(Color)
blue=Blue(Color)
green=Green(Color)
If mode = "-server" 
  ;si le prog est en mode "server", alors lancer le server 
  CreateNetworkServer(Port)  
ElseIf mode = "-client" 
  ;si le prog est en mode "client", alors ouvrir la connexion client sur le server 
  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) 
  EndIf 
EndIf 
Procedure MoveSquare(direction) 
;******************************************************************************** 
; Déplace les coordonnées du carré rouge en fonction de la direction renvoyée 
; par la variable 'direction'. 
; 0=gauche, 1=droite, 2=haut, 3=bas 
;******************************************************************************** 
  Select direction 
    Case 0 ; gauche 
      x-#STEP 
      If x < 0 : x = 0 : EndIf                 ; empêche le carré de sortir de l'écran (à gauche) 
    Case 1 ; droite 
      x+#STEP 
      If x > 640-#COTE : x = 640-#COTE : EndIf ; empêche le carré de sortir de l'écran (à droite) 
    Case 2 ; haut 
      y-#STEP 
      If y < 0 : y = 0 : EndIf                 ; empêche le carré de sortir de l'écran (en haut) 
    Case 3 ; bas 
      y+#STEP 
      If y > 480-#COTE : y = 480-#COTE : EndIf ; empêche le carré de sortir de l'écran (en bas) 
    Case 4
    Delay(10)
      message$=InputRequester("Message","entrer votre message","")  
      Delay(10)
      Default 
  EndSelect 
  
  ;SI le prog est en mode "client", ALORS envoi des coordonnées X & Y au server 
  ;X & Y sont séparés par des ";" et les différents blocs de coordonnées sont séparés par des "#" 
  If mode = "-client" 
    Delay(40)
    packet.s = Str(x)+";"+Str(y)+";"+Str(red)+";"+Str(blue)+";"+Str(green)+";"+message$+"#" 
    SendNetworkData(cnxID,@packet,Len(packet)) 
    message$=""
  EndIf 
  
EndProcedure 
Procedure DisplaySquare() 
;******************************************************************************** 
; Affiche le carré rouge à l'écran 
;******************************************************************************** 
  ClearScreen(0,0,0)                  ; Efface l'écran avec une couleur de fond noire 
  StartDrawing(ScreenOutput())        ; démarre la fonction "dessiner sur l'écran" 
  Box(x,y,#COTE,#COTE,RGB(255,0,0))   ; dessine le carré rouge aux coordonnées x & y 
  StopDrawing()                       ; arrête la fonction "dessiner sur l'écran" 
  FlipBuffers()                       ; affiche le résultat du dessin (permute les buffers) 
EndProcedure 
OpenWindow(#WIN,0,0,640,480,#PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget,mode+" "+ip+" "+Str(Port) ) 
OpenWindowedScreen(WindowID(#WIN),0,0,640,480,0,0,0) 
ssbloc.s="" ; initialisation de la chaine 'ssbloc' 
;Boucle principale répétée jusqu'a ce que la fenêtre soit fermée 
Repeat 
  EventID = WindowEvent() ; vérifie si un évènement Windows a été activé 
  DisplaySquare()  ; affiche le carré rouge 
  ExamineKeyboard() ; vérifie si une touche du clavier a été enfoncée puis relâchée 
  If KeyboardPushed(#PB_Key_Left)  : MoveSquare(0) : EndIf 
  If KeyboardPushed(#PB_Key_Right) : MoveSquare(1) : EndIf 
  If KeyboardPushed(#PB_Key_Up)    : MoveSquare(2) : EndIf 
  If KeyboardPushed(#PB_Key_Down)  : MoveSquare(3) : EndIf  
  If KeyboardPushed(#PB_Key_Return): MoveSquare(4) : EndIf 
  MoveSquare(6) 
  
  
    ;SI le prog a été lancé avec le mode "server", et qu'il n'y a pas de bloc... 
  If mode = "-server" And bloc = 0 
    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() 
      
      ;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 
  EndIf 
  
  ;SI il y a au moins un bloc, ALORS faire la bloucle qui récupère les coordonnées de chaque bloc 
  If bloc > 0 
    For k=1 To bloc 
      ssbloc = StringField(packet,k,"#")  ; extrait le bloc numéro k 
      x = Val(StringField(ssbloc,1,";"))  ; change x avec la coordonnée X du bloc k 
      y = Val(StringField(ssbloc,2,";"))  ; change y avec la coordonnée Y du bloc k 
      DisplaySquare()                     ; Affiche le carré rouge 
    Next 
    bloc=0 ; une fois la boucle terminée -> réinitialisation du compteur de blocs à 0 
  EndIf 
Until EventID = #PB_Event_CloseWindow 
If mode = "-server" 
  CloseNetworkServer()            ; si le prog est en mode "server", alors fermer le server 
ElseIf mode = "-client" 
    x=0
    y=0
    packet.s = Str(x)+";"+Str(y)+"#" 
    SendNetworkData(cnxID,@packet,Len(packet)) 
  CloseNetworkConnection(cnxID)   ; si le prog est en mode "client", alors fermer la connexion client 
EndIf 
End ; Terminaison du programme. 
 
 
le server
Code : Tout sélectionner
clicli=2
Dim pos(5,50)
#WIN  = 0   ; ID de la fenêtre principale 
#COTE = 50  ; taille des côtés du carré 
#STEP = 2   ; nombre de pixels de déplacement par pas 
;Déclaration des variables globales 
Global x, y, mode.s, IP.s, cnxID,clicli,clie
x = 0 ; initialisation de x à 0 
y = 0 ; initialisation de y à 0 
mode = ProgramParameter() ; récupération du 1er paramètre de la ligne de commande 
IP   = ProgramParameter() ; récupération du 2eme paramètre... 
InitSprite()    ; initialisation de la bilbiothèque des sprites 
InitKeyboard()  ; initialisation de la bilbiothèque du clavier 
InitNetwork()   ; initialisation de la bilbiothèque du réseau 
port=22 ; Attribution du port 6666 au programme 
mode = InputRequester("type","choissiser -server ou -client","-server")
IP   = InputRequester("ip","choissiser l'ip du server","80.10.55.117")
Port = Val(InputRequester("port","choissiser le port du server","22"))
If mode = "-server" 
  ;si le prog est en mode "server", alors lancer le server 
  CreateNetworkServer(Port)  
ElseIf mode = "-client" 
  ;si le prog est en mode "client", alors ouvrir la connexion client sur le server 
  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) 
  EndIf 
EndIf 
Procedure MoveSquare(direction) 
;******************************************************z************************** 
; Déplace les coordonnées du carré rouge en fonction de la direction renvoyée 
; par la variable 'direction'. 
; 0=gauche, 1=droite, 2=haut, 3=bas 
;******************************************************************************** 
For clie = 1 To clicli
  Select direction 
    Case 0 ; gauche 
      pos(1,clie)-#STEP 
      If pos(1,clie) < 0 : pos(1,clie) = 0 : EndIf                 ; empêche le carré de sortir de l'écran (à gauche) 
    Case 1 ; droite 
      pos(1,clie)+#STEP 
      If pos(1,clie) > 640-#COTE : pos(1,clie) = 640-#COTE : EndIf ; empêche le carré de sortir de l'écran (à droite) 
    Case 2 ; haut 
      pos(2,clie)-#STEP 
      If pos(2,clie) < 0 : pos(2,clie) = 0 : EndIf                 ; empêche le carré de sortir de l'écran (en haut) 
    Case 3 ; bas 
      pos(2,clie)+#STEP 
      If pos(2,clie) > 480-#COTE : pos(2,clie) = 480-#COTE : EndIf ; empêche le carré de sortir de l'écran (en bas) 
  EndSelect 
Next   
  ;SI le prog est en mode "client", ALORS envoi des coordonnées X & Y au server 
  ;X & Y sont séparés par des ";" et les différents blocs de coordonnées sont séparés par des "#" 
  If mode = "-client" 
    packet.s = Str(x)+";"+Str(y)+"#" 
    SendNetworkData(cnxID,@packet,Len(packet)) 
  EndIf 
  
EndProcedure 
Procedure DisplaySquare() 
;******************************************************************************** 
; Affiche le carré rouge à l'écran 
;******************************************************************************** 
  ClearScreen(0,0,0)                  ; Efface l'écran avec une couleur de fond noire 
  StartDrawing(ScreenOutput())        ; démarre la fonction "dessiner sur l'écran" 
  For clie=1 To clicli
  Box(pos(1,clie),pos(2,clie),#COTE,#COTE,RGB(pos(3,Clie),pos(4,Clie),pos(5,Clie)))   ; dessine le carré rouge aux coordonnées x & y 
  Locate(pos(1,clie)+5,pos(2,clie)+12)
  FrontColor(255,255,255)
  DrawingMode(1)
  DrawText(Str(clie))
  Next clie
  FrontColor(255,255,255)
  Locate(10,420)
  DrawText("message"+messg$)  
  
  StopDrawing()                       ; arrête la fonction "dessiner sur l'écran" 
  FlipBuffers()                       ; affiche le résultat du dessin (permute les buffers) 
EndProcedure 
OpenWindow(#WIN,0,0,640,480,#PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget,mode+" "+ip+" "+Str(Port) ) 
OpenWindowedScreen(WindowID(#WIN),0,0,640,480,0,0,0) 
ssbloc.s="" ; initialisation de la chaine 'ssbloc' 
;Boucle principale répétée jusqu'a ce que la fenêtre soit fermée 
Repeat 
  EventID = WindowEvent() ; vérifie si un évènement Windows a été activé 
  DisplaySquare()  ; affiche le carré rouge 
  ExamineKeyboard() ; vérifie si une touche du clavier a été enfoncée puis relâchée 
  If KeyboardPushed(#PB_Key_Left)  : MoveSquare(0) : EndIf 
  If KeyboardPushed(#PB_Key_Right) : MoveSquare(1) : EndIf 
  If KeyboardPushed(#PB_Key_Up)    : MoveSquare(2) : EndIf 
  If KeyboardPushed(#PB_Key_Down)  : MoveSquare(3) : EndIf  
  ;SI le prog a été lancé avec le mode "server", et qu'il n'y a pas de bloc... 
  If mode = "-server" And bloc = 0 
    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() 
      If clientID>clicli
      clicli=ClientID
      Dim pos(5,ClientID)
      EndIf 
      ;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 
  EndIf 
  
  ;SI il y a au moins un bloc, ALORS faire la bloucle qui récupère les coordonnées de chaque bloc 
  If bloc > 0 
    For k=1 To bloc 
      ssbloc = StringField(packet,k,"#")  ; extrait le bloc numéro k 
      pos(1,ClientID) = Val(StringField(ssbloc,1,";"))  ; change x avec la coordonnée X du bloc k 
      pos(2,ClientID) = Val(StringField(ssbloc,2,";"))  ; change y avec la coordonnée Y du bloc k
      pos(3,ClientID) = Val(StringField(ssbloc,3,";"))
      pos(4,ClientID) = Val(StringField(ssbloc,4,";"))
      pos(5,ClientID) = Val(StringField(ssbloc,5,";"))
      messg$ = StringField(ssbloc,6,";")
      DisplaySquare()                     ; Affiche le carré rouge 
      
    Next 
    bloc=0 ; une fois la boucle terminée -> réinitialisation du compteur de blocs à 0 
  EndIf 
 
Until EventID = #PB_Event_CloseWindow 
If mode = "-server" 
  CloseNetworkServer()            ; si le prog est en mode "server", alors fermer le server 
ElseIf mode = "-client" 
  CloseNetworkConnection(cnxID)   ; si le prog est en mode "client", alors fermer la connexion client 
EndIf 
End ; Terminaison du programme.