Je suis bloqué sur un petit probleme de réception de données avec la classe
ASycnhsocket. Mon programme est en mode client et ma routine de reception
ressemble à cela :
char buf[4096];
int nRead;
nRead = Receive (buf,4096); // Reception des données
Si le serveur envoie par exemple :
SALUT.SALUT2.\nSALUT3\n.SALUT4\n. (où '.' est 0x00)
ma routine reçoit dans le buffer de reception :
lors du 1ere appel : SALUT
lors du 2eme appel : SALUT3
lors du 3eme appel : SALUT4
Par contre le SALUT2 n'est pas recu :-(
Le probleme vient du fait qu'apres le premier SALUT, l'octet 0x00 semble
forcer la classe a considérer qu'il n'y a plus rien derrière, jusqu'au
prochain \n.
Peut-etre avez-vous une idée pour corriger le probleme ? Je vous remercie
d'avance.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Yalbrieux
Bonjour,
nRead = Receive (buf,4096); // Reception des données
Dans le silence des réponses, je vous suggère de balayer votre buffer sur les nRead caractères et de remplacer chaque 0x00 par un blanc par exemple. N'oubliez pas de remettre à zéro tout votre buffer avant lecture. Cordialement Yves
Bonjour,
nRead = Receive (buf,4096); // Reception des données
Dans le silence des réponses,
je vous suggère de balayer votre buffer sur les nRead caractères et de
remplacer chaque 0x00 par un blanc par exemple.
N'oubliez pas de remettre à zéro tout votre buffer avant lecture.
Cordialement
Yves
nRead = Receive (buf,4096); // Reception des données
Dans le silence des réponses, je vous suggère de balayer votre buffer sur les nRead caractères et de remplacer chaque 0x00 par un blanc par exemple. N'oubliez pas de remettre à zéro tout votre buffer avant lecture. Cordialement Yves
Alex
Bonjour et merci de votre aide,
J'ai modifié mon code afin de ne prendre en compte la réception que d'un seul caractère par OnReceive. Je les sauvegarde en attendant que la reception soit totale.
Ca fonctionne maintenant...
"Yalbrieux" a écrit dans le message de news: 43a5371b$0$19711$
Bonjour,
nRead = Receive (buf,4096); // Reception des données
Dans le silence des réponses, je vous suggère de balayer votre buffer sur les nRead caractères et de remplacer chaque 0x00 par un blanc par exemple. N'oubliez pas de remettre à zéro tout votre buffer avant lecture. Cordialement Yves
Bonjour et merci de votre aide,
J'ai modifié mon code afin de ne prendre en compte la réception que d'un
seul caractère par OnReceive. Je les sauvegarde en attendant que la
reception soit totale.
Ca fonctionne maintenant...
"Yalbrieux" <yalbrieux@wanadoo.fr> a écrit dans le message de news:
43a5371b$0$19711$8fcfb975@news.wanadoo.fr...
Bonjour,
nRead = Receive (buf,4096); // Reception des données
Dans le silence des réponses,
je vous suggère de balayer votre buffer sur les nRead caractères et de
remplacer chaque 0x00 par un blanc par exemple.
N'oubliez pas de remettre à zéro tout votre buffer avant lecture.
Cordialement
Yves
J'ai modifié mon code afin de ne prendre en compte la réception que d'un seul caractère par OnReceive. Je les sauvegarde en attendant que la reception soit totale.
Ca fonctionne maintenant...
"Yalbrieux" a écrit dans le message de news: 43a5371b$0$19711$
Bonjour,
nRead = Receive (buf,4096); // Reception des données
Dans le silence des réponses, je vous suggère de balayer votre buffer sur les nRead caractères et de remplacer chaque 0x00 par un blanc par exemple. N'oubliez pas de remettre à zéro tout votre buffer avant lecture. Cordialement Yves
Dominique Vaufreydaz
Bonjour,
J'ai modifié mon code afin de ne prendre en compte la réception que d'un seul caractère par OnReceive. Je les sauvegarde en attendant que la reception soit totale.
Euh, c'est dangereux non ? C'est quoi l'interet ? Ce n'est pas parceque tu ne vois (via un printf) que le mot n'est pas recu. LEs sockets travaillent en binaire. Quel valeur de nombre d'octets recus as-tu en core retour de Receive ?
Doms.
Bonjour,
J'ai modifié mon code afin de ne prendre en compte la réception que
d'un seul caractère par OnReceive. Je les sauvegarde en attendant que
la reception soit totale.
Euh, c'est dangereux non ? C'est quoi l'interet ? Ce n'est pas parceque
tu ne vois (via un printf) que le mot n'est pas recu. LEs sockets travaillent
en binaire. Quel valeur de nombre d'octets recus as-tu en core retour
de Receive ?
J'ai modifié mon code afin de ne prendre en compte la réception que d'un seul caractère par OnReceive. Je les sauvegarde en attendant que la reception soit totale.
Euh, c'est dangereux non ? C'est quoi l'interet ? Ce n'est pas parceque tu ne vois (via un printf) que le mot n'est pas recu. LEs sockets travaillent en binaire. Quel valeur de nombre d'octets recus as-tu en core retour de Receive ?
Doms.
Dominique Vaufreydaz
Re,
notons aussi que 4 send d'un cote, se se solde pas forcement par 4 receive de l'autre. TCP gere le regroupement de paquet ! Meme en local !
Doms.
Re,
notons aussi que 4 send d'un cote, se se solde pas forcement par
4 receive de l'autre. TCP gere le regroupement de paquet !
Meme en local !