Comment distingué 2 clients dans un chat en mode tcp

Résolu
cs_facilus Messages postés 33 Date d'inscription lundi 19 juin 2006 Statut Membre Dernière intervention 15 novembre 2007 - 10 nov. 2006 à 19:07
cs_facilus Messages postés 33 Date d'inscription lundi 19 juin 2006 Statut Membre Dernière intervention 15 novembre 2007 - 11 nov. 2006 à 13:18
slt tt le monde,

jé fé un pti source pour dialogué entre 2 client et un serveur avec le langage c sous unix, sachant ke avec la fontion accept elle retourne toujour un nouveau id de socket voici le code de la partie serveur :

while(1)
{
 nsd = accept(sd,(struct sockaddr *)&son_adr,&ss);
// lorske le client envoi un 2eme message , je je ve pa faire un accept, pour ne pa perdre la trace, cmt la sauvegarder ?
  if (nsd ==-1)
      {
          perror("accept");
          exit(3);
      }
   read(nsd,buf,sizeof(buf));
   printf ("le serveur a reçu ce message : %s\n",buf);
  
   if(strcmp(buf,"quit")==0)
     { close (nsd); }
  }

et voici le code de la partie client :

while (1)
{
   printf("ecrire le message \n");
   scanf("%s",&msg);
   write(sd,msg,sizeof(msg));
  if(strcmp(msg,"quit")==0)
   {close(sd);}

}

ce ke je , et lorsque j'ai 3 client qui se connecte au serveur, comment faire pour les distingué(gardé la trace d'un client),  autrement lorsque le serveur recoit des message d'un client , il doit savoir lekel dé 3 la envoyer ?

merci a tous

9 réponses

Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
10 nov. 2006 à 20:57
Salut:

Normalement, ça devra travailler.

Voici un lien:
http://www.manualy.sk/sock-faq/unix-socket-faq-4.html
                         |
                         |
                         |
                         V
Voir le titre "


4.9 How do I get my server to find out the client's address / hostname?


"
3
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
10 nov. 2006 à 19:45
Salut:

Pourquoi ne pas attruber des identifiant à ces clients en se basant sur leurs adresses IP.

La clef est l'adresse IP.
0
cs_facilus Messages postés 33 Date d'inscription lundi 19 juin 2006 Statut Membre Dernière intervention 15 novembre 2007
10 nov. 2006 à 20:08
et comment leur attribué ?
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
10 nov. 2006 à 20:26
Salut:



La fonction "getpeername ()" vous dira qui est de l'autre cote de la connection.

Prototype:




#include <sys/socket.h>
int getpeername(int sockfd,
struct sockaddr *addr,
int *addrlen);











Voilà un lien intéressant :
http://www.chez.com/vidalc/lf/socket.html
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_facilus Messages postés 33 Date d'inscription lundi 19 juin 2006 Statut Membre Dernière intervention 15 novembre 2007
10 nov. 2006 à 20:43
baraka allah fik (merci bc) est ce ke je pe l'utilisé dan le programme server ? et comment stp ?
c seulemnt pour savoir dan le serveur ; kel é le client ki a envoyé le message é faire un printf de ce genre :

printf("le client ? a envoyé le message %s \n", ? , msg);
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
10 nov. 2006 à 21:08
Salut:

Comment ça va?
0
cs_facilus Messages postés 33 Date d'inscription lundi 19 juin 2006 Statut Membre Dernière intervention 15 novembre 2007
11 nov. 2006 à 00:47
merci bc , jé resolu ce pb , un autre je n'arrive tj pa a le resoudre é k'avec le meme code lorsque par exemple un client envoi 2 message un a un ,
le 1er sera recu dan le serveur tandi ke le 2eme non , comment resoudre pour pouvoir envoyer une succesuin de messages ?
Merci bc
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
11 nov. 2006 à 12:30
Salut:

Pour ta 2eme question je pense que tu dois créer des threads (un processus fils) à l'aide de la primitive fork.
0
cs_facilus Messages postés 33 Date d'inscription lundi 19 juin 2006 Statut Membre Dernière intervention 15 novembre 2007
11 nov. 2006 à 13:18
merci , j'ai pensé a ça aussi, je me sui di on méttant dan le code du fils : la primitive "accept" , et dans le code du pere : la primitive "read" , est ce ke ca marche comme ça ?
0