[SOCKET]Tjrs le pb de recuperation du buffer recv()
enthaz
Messages postés13Date d'inscriptionsamedi 26 juillet 2003StatutMembreDernière intervention27 août 2003
-
23 août 2003 à 19:30
enthaz
Messages postés13Date d'inscriptionsamedi 26 juillet 2003StatutMembreDernière intervention27 août 2003
-
27 août 2003 à 21:10
Allez J me lance : ca fait des heures et des heures ke le newb ke je suischerche la solution :
D un coté j ai un logiciel client ki envoie "coucou" sur le port d une machine sur un port determiné.
D un autre coté un serveur qui ecoute sur le mm port en tente ( desesperement d afficher ce k il recoit.
Or il affiche n importe koi ac en plus -1 pr le resultat de recv().
Je c ke ce prob en revenu svt sur le forum mais apres des recherches je n ai pas trouV de solutions convaincante. Votre solution servira dc d autres codeurs. Merci d avance pr vos reponses, je vs donne les codes sources :
---------------------------------------------------------------------- Partie serveur
----------------------------------------------------------------------
Anacr0x
Messages postés515Date d'inscriptiondimanche 25 mai 2003StatutMembreDernière intervention27 avril 20062 24 août 2003 à 00:11
G vraiment pas le temps de regardé le code en détail la mais sincerement, au lieu de te faire ***** a crée ca, je te conseille de regardé la source [1875 http://www.cppfrance.com/article.aspx?ID=1875], tu vera, c bien fait, largement suffisant ds la plupart des cas et assez pratique (^_^)
Anacr0x
Messages postés515Date d'inscriptiondimanche 25 mai 2003StatutMembreDernière intervention27 avril 20062 24 août 2003 à 14:14
Pour linux ? On parle bien de la meme source la ?
Tu n'as qu'as inclure bubsock.h ds ton projet et ensuite ta déja dé exemple, de plus, ca marche très bien sous windows, g déja testé...
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 24 août 2003 à 15:41
Salut,
Tu ne peut pas recevoir des infos a partir d'un socket qui ecoute.
Dans ton serveur en haut tu met SOCKET sclient;
et quand tu accepte la connexion tu met sclient = accept(sock, (SOCKADDR *)&sin, &sinsize)
Et tu appelles recv(...) avec sclient.
Et ca marche.
enthaz
Messages postés13Date d'inscriptionsamedi 26 juillet 2003StatutMembreDernière intervention27 août 2003 25 août 2003 à 21:37
Est ce qu il faut mettre ca ds le serveur et ds le client ou juste le serveur?Et est ce qu il fo definir un SOCKADDR_IN pr le socket ke tu m a dit de rajouter? Merci bcp
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 25 août 2003 à 21:50
Salut,
Ben puisque c'est la ligne avec accept(..) qui merde, c'est forcément dans le serveur.
accept(...) retourne un socket handle, ce nouveau socket handle identifie la connexion acec le client qui vient de se connecter. L'ancien socket lui, continue a ecouter sur le port donné.
enthaz
Messages postés13Date d'inscriptionsamedi 26 juillet 2003StatutMembreDernière intervention27 août 2003 27 août 2003 à 12:56
Deja merci pour ton aide .
Ca marche deja mieux avec tes conseils mais c pas parfait :
J essaye d envoyer "Hello World!" ac le client mais je ne recoit que "Hell" . C est fort embetant et si t avai une idee. Le buffer est defini ds le serveur en new char[255]
Si t as besoin du nv code source dis le moi.
Merci
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 27 août 2003 à 13:05
Salut,
L'erreur doit etre dans le recv(...) au niveau du 3eme argument. Il faut y mettre la taille du buffer que tu passe en 2eme argument, soit sizeof(buffer).
Si tu ne recois que Hell c'est que tu as du passer un truc qui retourne 4.
Si c'est pas ca, poste le code.
enthaz
Messages postés13Date d'inscriptionsamedi 26 juillet 2003StatutMembreDernière intervention27 août 2003 27 août 2003 à 13:19
Je recoit exactement "Hell=======================================================================================²²²²"
Ss quoi j ai bien mis sizeof.Je te passe les codes mais je suis pas la cet aprem dc je regarderai ce soir. Merci encore de m aider c sympa.
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 27 août 2003 à 13:32
Salut,
sizeof(buffer) retourne 4.
Normal quand on veut faire des alloc bizzares alors que c'est inutile.
Remplace char *buffer = new char[255];
par char buffer[256];
Aussi, quand tu envoies une chaine de caractere, il faut passer la longueur de la chaine au 3eme argument de send(..), pas la longueur du buffer, donc il faut mettre strlen("Hello world!"); dans ton client.
enthaz
Messages postés13Date d'inscriptionsamedi 26 juillet 2003StatutMembreDernière intervention27 août 2003 27 août 2003 à 19:15
Alors maintenant je recoit bien la chaine en entier.J ai mm fait un stricmp pr verifier ce que recevait le serveur pask il reste un petit probleme : a l affichage y a toute une floppee de caractere bizarres apres ma chaine.
Mais bon le principal c ke je puisse traiter la chaine en dehors de l affichage.Mais si t azs une idee ... Merci
Enthaz
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 27 août 2003 à 19:30
Salut,
Tu as essayé d'envoyer strlen(buffer) octets seulement, comme je t'ai dis dans le post d'avant ?
strlen(..) inclus le caractere final NULL, donc il ne devrait pas y avoir de probleme d'affichage, puisque tu recois la chaine telle qu'elle a été envoyée.
enthaz
Messages postés13Date d'inscriptionsamedi 26 juillet 2003StatutMembreDernière intervention27 août 2003 27 août 2003 à 19:39
Salut
oui j ai bien mis le strlen mais le test ne marche po et l affichage non plus.Par contre le recv renvoie le bon nombre de caractere reçus !!
merci
Enthaz
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 27 août 2003 à 19:51
Salut,
Et bien si tu recois le bon nombre de caractere (nbre de lettres de la chaine+1) c'est que l'erreur est autre part puisque la chaine que tu recois est identique a celle que tu envoies.
enthaz
Messages postés13Date d'inscriptionsamedi 26 juillet 2003StatutMembreDernière intervention27 août 2003 27 août 2003 à 20:04
oups j avais oublier le 0 dc il me renvoi pas longueur+1.je c pas ... Si ca t embete laisse tomber c pas grave merci
(je v manger pe pas te repndre tt de suite)
Enthaz