Problème dialogue socket [Résolu]

Signaler
Messages postés
47
Date d'inscription
samedi 2 juillet 2005
Statut
Membre
Dernière intervention
3 janvier 2008
-
Messages postés
47
Date d'inscription
samedi 2 juillet 2005
Statut
Membre
Dernière intervention
3 janvier 2008
-
Bonjour à tous,



voilà j'ai un problème avec les sockets. Je voudrais me connecter au
serveur pop de free sur le port 110 et récupérer le nombre d'email de
l'utilisateur.

J'arrive à me connecter sans problème, je reçoit un message du serveur
comme quoi tout est OK. Ensuite j'envoie la commande USER user et fait
un recv derrière mais mon application reste figée ici, elle fonctionne
mais attend quelque chose mais je ne sais pas quoi. Quelqu'un peut me
dire ce qu'il y a ? Merci.



//Connection

sin.sin_addr.s_addr = inet_addr(inet_ntoa(**a));

sin.sin_family = AF_INET;

sin.sin_port = htons(110);

sock = socket(AF_INET,SOCK_STREAM,0);

bind(sock,(SOCKADDR *)&sin,sizeof(sin));



connect(sock,(SOCKADDR *)&sin,sizeof(sin));

videbuffer(buffer,1024);

recv(sock,buffer,1024,0);

puts(buffer);

videbuffer(buffer,1024);

//Jusque là tout marche tranquille



//Identification

gets(buffer);

send(sock,buffer,sizeof(buffer),0);

videbuffer(buffer,1024);

recv(sock,buffer,1024,0);//C'est ici que ça bloque

puts(buffer);

printf("A");

videbuffer(buffer,1024);



A+

2 réponses

Messages postés
338
Date d'inscription
samedi 9 août 2003
Statut
Membre
Dernière intervention
9 juillet 2011
2
salut la foction recv(...); est une fonction bloquante qui veux dire que tant que rien n'est recus, elle attendra. donc si tu n'envoie pas de donner ton programme ne passera pas à la suite.
Solution : Les threads tu peux tout simplement metre ta fonction receive dans un thread avec une boucle while, et ensuite utiliser ce quelle recoie.

voilà moi j'utilise les message FD_READ,FD_CLOSE.... donc j'utilise mes messages de l'api. donc aucun problème ils a des source dans ce site qui en parle.
salut.
Messages postés
47
Date d'inscription
samedi 2 juillet 2005
Statut
Membre
Dernière intervention
3 janvier 2008

J'ai enfin trouvé le problème, j'oubliais simplement de mettre un
retour chariot à la fin de chacune des commandes que j'envoyais au
serveur. Merci quand même pour ton aide.