Le Conseil des Entités
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.


forum privé
 
AccueilRechercherDernières imagesS'enregistrerConnexion
Le Deal du moment :
Boutique Nike : -25% dès 50€ sur TOUT le ...
Voir le deal

 

 y a un début à tout... on l'aura attendu un moment celui là!

Aller en bas 
3 participants
AuteurMessage
illioren
Fondateur
Fondateur
illioren


Nombre de messages : 154
Date d'inscription : 19/06/2006

y a un début à tout... on l'aura attendu un moment celui là! Empty
MessageSujet: y a un début à tout... on l'aura attendu un moment celui là!   y a un début à tout... on l'aura attendu un moment celui là! EmptyVen 24 Nov - 11:31

Bon ben j'inogure ce poste Wink non pas que j'ai enfin le niveau pour me lancer dans la prog d'une partie du jeu, loin de là. C juste pour dire que j'aborde bientot la programmation graphique 2d(enfin, fini les codes en console msdos super moche et qui servent à rien). D'ailleur ) ce sujet il me emble que je ne suis pas le plus avancé, lightsword a déja commencé la programmation 2d depuis un petit bout de temps Cool . Tout ça pour dire que meme si je donne pas de signe de vie, j'essais d'avancer un peu... enfin je vais essayer maintenant que mon abonnement à wow est fini y a un début à tout... on l'aura attendu un moment celui là! 347
Revenir en haut Aller en bas
illioren
Fondateur
Fondateur
illioren


Nombre de messages : 154
Date d'inscription : 19/06/2006

y a un début à tout... on l'aura attendu un moment celui là! Empty
MessageSujet: Re: y a un début à tout... on l'aura attendu un moment celui là!   y a un début à tout... on l'aura attendu un moment celui là! EmptyJeu 1 Fév - 13:38

Voila le premier programme gerrant le réseau ainsi que les Threads (mutiple procéssus dans un programme) réalisé avec un ami de supinfo (poupoudoum, qui a déja réalisé quelque jeu, pour les interressés : http://poupoudoum.games.free.fr les sources des jeux sont disponibles).
Pour notre programme, il s'agit d'un chat en console (on est en train de travailler sur l'interface graphique en ce moment meme). Il y a 2 sources (une client et une server).
ATTENTION : Ce programme ne marche qu'en raiseau local en raison des fonctions de routages des différentes box- tapper " l " à la place de l'adresse IP pour le tester en local. Autre chose, pour cloturer une phrase à envoyer, il faut mettre le symbole "<" à la fin avant d'appuyer sur entrée...Cette contrainte vien du fait que l'espace est un caractère d'achappement pour le scanf et qu'on a rien trouvé de mieu pour le moment Rolling Eyes
Je pense que tout est di, bonne chance lol!

Code Client:
Code:
#include <SDL/SDL.h>
#include <SDL/SDL_net.h>
#include <SDL/SDL_thread.h>
#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#include <string.h>

void NETOYAGE(char *chaine,int longeur);
//Netoye une chaine apres reception: enleve les caractères 'ignobles'

void INITCHAINE(char *chaine,int longeur);
//remplit une chaine de zeros

int RECEPTION(void *data);


TCPsocket Socket;
IPaddress Hote;
char Input[1500];//chaine saisie par l'utilisateur
char Output[1500];//chaine recue
char MonPseudo[128];//Pseudo
char SonPseudo[128];//pseudo du serveur
char IpHote[256];//chaine de saisie de l'hote
char buf[256];//chaine tampon


int main(int argc,char** argv)
{
   
   SDL_Thread *mon_thread;

   //initialisation de la SDL
    SDL_Init(SDL_INIT_VIDEO);
    SDLNet_Init();

   //on initalise les chaines
   INITCHAINE(Input,1500);
   INITCHAINE(Output,1500);
   INITCHAINE(buf,255);

   printf("Entrez l'ip du serveur a joindre:");
   scanf("%s",IpHote);

   if (IpHote[0]=='a' && IpHote[1]=='\0')
   sprintf(IpHote,"illioren-pc");

   if (IpHote[0]=='l' && IpHote[1]=='\0')
   sprintf(IpHote,"localhost");

   //Tentative de connection
   SDLNet_ResolveHost(&Hote,IpHote,3000);
                                           
   Socket = SDLNet_TCP_Open(&Hote);

   // Maintenant Socket contient une socket valide que l'on peut utiliser

   if(Socket==NULL)//connection impossible
    printf("\n\nImpossible de se connecter a %s\n\n\n",IpHote);

   else
   {
      
      SDLNet_TCP_Recv(Socket,(void*)buf,128);
      printf ("message du serveur: %s",buf);
      //connection reussie
      printf ("\n\nConnecte a %s\nEn Attente du Pseudo...\n",IpHote);
      SDLNet_TCP_Recv(Socket,(void*)SonPseudo,128);
      MessageBeep(1);
      NETOYAGE(SonPseudo,120);
      printf ("Pseudo du serveur: %s\nEntrez votre pseudo:",SonPseudo);
      scanf("%s",MonPseudo);
      SDLNet_TCP_Send(Socket,(void*)MonPseudo,strlen(MonPseudo));
      printf ("\nDebut de la conversation entre %s et %s:\n________________________________________________\n", SonPseudo,MonPseudo);

      //messages de connections
      MessageBeep(1);
      Sleep(200);      
      MessageBeep(1);
      Sleep(200);

      //creation du Thread de reception
      mon_thread = SDL_CreateThread(RECEPTION, NULL);

      MessageBeep(1);
      Sleep(200);

      do
      {

         INITCHAINE(Input,strlen(Input));
         INITCHAINE(Output,strlen(Output));

         scanf("%s",&Input);//saisie du premier mot
         while(Input[strlen(Input)-1]!='<')//si le mot ne se fini pas par <, la phrase n'est pas finie
         {
            scanf("%s",&buf);//on saisi le deuxieme mot
            sprintf(Input,"%s %s",Input,buf);//on le concatène
         }
         Input[strlen(Input)-1]=0;//on enlève le <
         
         //on envoie
         SDLNet_TCP_Send(Socket,(void*)Input,strlen(Input));
         printf("\r%s dit:\t %s",MonPseudo,Input);
         MessageBeep(1);

      }while(strcmp(Input,"quit")!=0);
   }

   SDL_KillThread(mon_thread);

    SDLNet_Quit();
    SDL_Quit();

   system("pause");


    return 0;
}

void NETOYAGE(char *chaine,int longeur)
{
int var;

   for(var=0;var<longeur;var++)
   {
      if (chaine[var]=='_') chaine[var]=' ';
      if((int)chaine[var]==-52)
      {
         chaine[var]=0;
         return;
      }
   }
}

void INITCHAINE(char *chaine,int longeur)
{
   int var;
   for (var=0;var<longeur;var++)
      chaine[var]=0;
}

int RECEPTION(void *data)
{
   while (1)
   {
      SDLNet_TCP_Recv(Socket,(void*)Output,1500);
      NETOYAGE(Output,1500);
      printf("\n%s dit:\t %s\n",SonPseudo,Output);
      MessageBeep(1);
      Sleep(100);
   }
}
Code Server
Code:
#include <SDL/SDL.h>
#include <SDL/SDL_net.h>
#include <SDL/SDL_thread.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <windows.h>

int selection=1;
NETOYAGE(char *chaine,int longeur);
INITCHAINE(char *chaine,int longeur);
int RECEPTION(void *data);

TCPsocket serveur,connectee;
IPaddress adresse;
char Output[1500], Input[1500];
int Outputval, Inputval;
char MonPseudo[128];//Pseudo
char SonPseudo[128];//pseudo du client
char buf[128];//chaine temporaire

int main(int argc, char *argv[])
{   
   SDL_Thread *mon_thread;

   //initialisation de SDL
   SDL_Init(SDL_INIT_VIDEO);
   SDLNet_Init();
   printf ("  --  initialisation terminee \n");
   INITCHAINE(Input,1500);
   INITCHAINE(Output,1500);

   SDLNet_ResolveHost(&adresse,NULL,3000);
   serveur = SDLNet_TCP_Open(&adresse);

   Input[0]=0;
   Output[0]=0;
   connectee = NULL;
   printf ("  --  le server ecoute \n");
   while(connectee == NULL)
   {
      connectee = SDLNet_TCP_Accept(serveur);

   }
   MessageBeep(1);
   printf ("  --  server connecte \n \n");
   
   //connection reussie
   sprintf(buf,"Bienvenue dans cette session de chat!!");
   SDLNet_TCP_Send(connectee,(void*)buf,strlen(buf));
   printf ("Entrez votre pseudo:");
   scanf("%s",MonPseudo);
   SDLNet_TCP_Send(connectee,(void*)MonPseudo,strlen(MonPseudo));
   printf("\nEn Attente du Pseudo...\n");
   SDLNet_TCP_Recv(connectee,(void*)SonPseudo,128);
   NETOYAGE(SonPseudo,120);
   printf ("Pseudo du client: %s",SonPseudo);
   MessageBeep(1);
   printf ("\nDebut de la conversation entre %s et %s:\n________________________________________________\n", SonPseudo,MonPseudo);

   //creation du Thread de reception
   mon_thread = SDL_CreateThread(RECEPTION, NULL);

   while (1)
   {
      INITCHAINE(Input,strlen(Input));
      scanf("%s",&Input);//saisie du premier mot
      while(Input[strlen(Input)-1]!='<')//si le mot ne se fini pas par <, la phrase n'est pas finie
      {
         scanf("%s",&buf);//on saisi le deuxieme mot
         sprintf(Input,"%s %s",Input,buf);//on le concatène
      }
      Input[strlen(Input)-1]=0;//on enlève le <
      
      Inputval=strlen (Input);
      SDLNet_TCP_Send(connectee,(void*)Input,Inputval);
      printf("%s dit:\t %s",MonPseudo,Input);
   }

   SDLNet_TCP_Close(connectee);

   SDL_KillThread(mon_thread);
   SDLNet_Quit();
   SDL_Quit();
   return EXIT_SUCCESS;
}

NETOYAGE(char *chaine,int longeur)
{
   int var;

   for(var=0;var<longeur;var++)
   {
      if((int)chaine[var]==-52)
      {
         chaine[var]=0;
         return;
      }
   }

}
INITCHAINE(char *chaine,int longeur)
{
   int var;
   for (var=0;var<longeur;var++)
      chaine[var]=0;
}

int RECEPTION(void *data)
{
   while (1)
   {
      INITCHAINE(Output,strlen(Output));
      SDLNet_TCP_Recv(connectee,(void*)Output,1500);
      Sleep(100);
      MessageBeep(1);
      NETOYAGE(Output,1500);
      printf ("\n%s dit :\t %s \n",SonPseudo,Output);
   }
}

Voilou, comme vous le voyez, il faut avoir la SDL, la SDL_thread, la SDL_net
Si vous voulez un lien vers les .c , les .exe et les .dll :
pour les sources :
source serveur: http://illioren.ifrance.com/programmation/raiseau/essais/sources/SGIM/mainserveur.c
source client: http://illioren.ifrance.com/programmation/raiseau/essais/sources/SGIM/mainclient.cpp
pour les .dll (qui sont à copier dans le dossier de l'exécutable)
Le dll de la SDL: http://illioren.ifrance.com/programmation/raiseau/essais/dll/SGIM/SDL.dll
Le dll de la SDL_net : http://illioren.ifrance.com/programmation/raiseau/essais/dll/SGIM/SDL_net.dll
Pour les .exe
le client: http://illioren.ifrance.com/programmation/raiseau/essais/exe/SGIM/SGIMclient.exe
le serveur: http://illioren.ifrance.com/programmation/raiseau/essais/exe/SGIM/SGIMserveur.exe


Dernière édition par le Ven 2 Fév - 21:16, édité 2 fois
Revenir en haut Aller en bas
Kyoshiro
Fondateur
Fondateur
Kyoshiro


Nombre de messages : 96
Age : 34
Date d'inscription : 19/06/2006

y a un début à tout... on l'aura attendu un moment celui là! Empty
MessageSujet: Re: y a un début à tout... on l'aura attendu un moment celui là!   y a un début à tout... on l'aura attendu un moment celui là! EmptyJeu 1 Fév - 13:58

comme vous le voyez .... c'est voulu comme blague ?
sinon merci pour ce système, j'attend de voir votre version béta ^^
essayez de faire un système qui te connecte automatiquement a un salon qui es en fonction du sous réseau
ça serait pratique si tu met toutes les personnes d'une meme zone géographique dans un ss réseau, ça te ferais un chan de région
je sais pas si j'ai été très clair

enfin déja transformer le messenger en chat
Revenir en haut Aller en bas
illioren
Fondateur
Fondateur
illioren


Nombre de messages : 154
Date d'inscription : 19/06/2006

y a un début à tout... on l'aura attendu un moment celui là! Empty
MessageSujet: Re: y a un début à tout... on l'aura attendu un moment celui là!   y a un début à tout... on l'aura attendu un moment celui là! EmptyJeu 1 Fév - 14:17

Mouai... et en français sa donne quoi?
lol non je dec
Ben écoute, sa peu etre pas mal mais galère à réaliser....
On véra sa après l'interface graphique je pense :p
( créer un sous raiseau virtuel...go à stormwind y a un début à tout... on l'aura attendu un moment celui là! 382 )
Revenir en haut Aller en bas
Kyoshiro
Fondateur
Fondateur
Kyoshiro


Nombre de messages : 96
Age : 34
Date d'inscription : 19/06/2006

y a un début à tout... on l'aura attendu un moment celui là! Empty
MessageSujet: Re: y a un début à tout... on l'aura attendu un moment celui là!   y a un début à tout... on l'aura attendu un moment celui là! EmptyJeu 1 Fév - 14:25

c'est des pistes d'amélioration
sinon tu peux inclure le code html pour gras italique & co
tu peux aussi essayer de faire une modification de pseudo dynamique a nimporte quel moment grace a une commande (plus facile)
virer le < a la fin de chaque ligne

plein d'améliorations en fait
Revenir en haut Aller en bas
Progs




Nombre de messages : 9
Date d'inscription : 23/06/2007

y a un début à tout... on l'aura attendu un moment celui là! Empty
MessageSujet: Re: y a un début à tout... on l'aura attendu un moment celui là!   y a un début à tout... on l'aura attendu un moment celui là! EmptyDim 24 Juin - 9:54

C'est con de regrouper les personnes par sous réseaux. Au final ça ferait plus un regroupement par FAI plus qu'un regroupement par région.

Sinon, je pense que plus que de s'occuper de mettre un formatage HTML des messages, il faudrait plutôt s'orienter pour le moment sur le jeu lui même Smile.

En cours de jeu je pense qu'il n'est d'aucune utilité de mettre des couleurs dans ses messages.
Revenir en haut Aller en bas
illioren
Fondateur
Fondateur
illioren


Nombre de messages : 154
Date d'inscription : 19/06/2006

y a un début à tout... on l'aura attendu un moment celui là! Empty
MessageSujet: Re: y a un début à tout... on l'aura attendu un moment celui là!   y a un début à tout... on l'aura attendu un moment celui là! EmptyDim 24 Juin - 14:10

of cource...
Sa n'était qu'un exemple de mes début en raiseau ( y a un début à tout... on l'aura attendu un moment celui là! 382 <-- jeune codeur néophite devant sa SDLnet).
Je pense pas que le code sera utilisé dans le jeu (ou plutot j'espère qu'il ne le sera pas)...
Sinon du texte en couleur c'est super utile pour différencier les information de combat, des messages privés, des messages de groupe, des messages générals , etc...
Revenir en haut Aller en bas
Contenu sponsorisé





y a un début à tout... on l'aura attendu un moment celui là! Empty
MessageSujet: Re: y a un début à tout... on l'aura attendu un moment celui là!   y a un début à tout... on l'aura attendu un moment celui là! Empty

Revenir en haut Aller en bas
 
y a un début à tout... on l'aura attendu un moment celui là!
Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Le Conseil des Entités :: Programmation :: exemples :: Réseau-
Sauter vers:  
Ne ratez plus aucun deal !
Abonnez-vous pour recevoir par notification une sélection des meilleurs deals chaque jour.
IgnorerAutoriser