Problème serveur TCP en C

lenneth666 Messages postés 138 Date d'inscription samedi 18 novembre 2000 Statut Membre Dernière intervention 23 novembre 2010 - 9 avril 2006 à 15:32
bigbourin Messages postés 64 Date d'inscription lundi 12 avril 2004 Statut Membre Dernière intervention 18 août 2006 - 11 avril 2006 à 02:10
BOnjour j'ai un petit problème.



Je voulais faire en sorte que mon serveur puisse gérer la réception et
l'envoi de message en parralèle, mais celà ne marche pas et je ne
comprend pas pk.

qq'un pourrai t'il m'aider ? je vous fait un CC d'un bout dmon code



il n'y a que la lecture pour l'instant car je ne vois pas encore comment je vai faire pour l'ecriture



client = accept(s,(struct sockaddr *) &pre,&longueur) ;

if(client < 0)

erreur("erreur acceptation client");



fd_set fread;

fd_set fwrite;



while(1)

{

FD_ZERO(&fread);

FD_ZERO(&fwrite);

FD_SET(s,&fread);

FD_SET(s,&fwrite);

FD_SET(0,&fread);

FD_SET(0,&fwrite);



if( (sel=select(s+1,&fread,&fwrite,NULL,NULL)) <0)

erreur("erreur select\n");





buf=(char *)malloc(256);

i=0;

longueur = sizeof(struct sockaddr_in);

char *msg;



// client = accept(s,(struct sockaddr *) &pre,&longueur) ;



if(FD_ISSET(client,&fread))

{


rec=read(client,buf,256);




if(strncmp(buf,"/fin",4) == 0)

{



printf("L'utilisateur %s c'est déconnecté\n",inet_ntoa(pre.sin_addr));


close(client);

}

else

{


printf("le
Buffer est : %s\n",buf);

}



i=strlen(buf);

msg = (char *)malloc(i+1);

msg[i]='\0';

strncpy(msg,buf,i);

printf("message reçu : %s\n",msg);

}







merci d'avance

3 réponses

bigbourin Messages postés 64 Date d'inscription lundi 12 avril 2004 Statut Membre Dernière intervention 18 août 2006
9 avril 2006 à 23:05
Je sais pas si j'ais tres bien compris ton problemme mais bon premièrement tu peut a la fois écrire et lire sur un socket par exemeple en alternance (envoi / reception) t'envoi un packet dans un sens puis un dans l'autre pour le faire tout en meme temps je pense que c'est que possible en utilisant plusieurs sockets.
tu a la fonction select qui permet de recevoir les connection tout en transmetant des données. Je ne l'ais jamais utiliser faudrait que tu te renseigne mieu mais tu la connais surement deja.
voila je sais pas si je t'aide bcp mais bon ... faut toujour essayer ^^
0
lenneth666 Messages postés 138 Date d'inscription samedi 18 novembre 2000 Statut Membre Dernière intervention 23 novembre 2010
10 avril 2006 à 13:13
bah si j'ai demandé de l'aide a cause de la commande select c'est que je la connait pas ^^
0
bigbourin Messages postés 64 Date d'inscription lundi 12 avril 2004 Statut Membre Dernière intervention 18 août 2006
11 avril 2006 à 02:10
Je connais pas la fonction select je vais te copier une doc que j'ais :
"La fonction select() permet d'écouter sur plusieurs socket descriptors en même temps et d'être réveillé par le premier qui devient actif"

prototype :
=> int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exeptfds, struct timeval *timeout);

Je n'ais pas plus d'information apparement elle pourait repondre a ton problemme mais je ne peut pas t'expliquer comment on l'utilise. désolé.
0
Rejoignez-nous