cs_facilus
Messages postés33Date d'inscriptionlundi 19 juin 2006StatutMembreDernière intervention15 novembre 2007
-
10 nov. 2006 à 19:07
cs_facilus
Messages postés33Date d'inscriptionlundi 19 juin 2006StatutMembreDernière intervention15 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 ?
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 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?
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 10 nov. 2006 à 19:45
Salut:
Pourquoi ne pas attruber des identifiant à ces clients en se basant sur leurs adresses IP.
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 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);
cs_facilus
Messages postés33Date d'inscriptionlundi 19 juin 2006StatutMembreDernière intervention15 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);
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 10 nov. 2006 à 21:08
cs_facilus
Messages postés33Date d'inscriptionlundi 19 juin 2006StatutMembreDernière intervention15 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
Ombitious_Developper
Messages postés2333Date d'inscriptionsamedi 28 février 2004StatutMembreDernière intervention26 juillet 201338 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.
cs_facilus
Messages postés33Date d'inscriptionlundi 19 juin 2006StatutMembreDernière intervention15 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 ?