Précédent   Forum du club des développeurs et IT Pro > Applications > Développement 2D, 3D et Jeux > API graphiques > SFML
SFML Forum d'entraide sur l'API SFML
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 05/01/2012, 19h34   #1
coupecoupe
Invité de passage
 
Inscription : novembre 2011
Messages : 9
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : novembre 2011
Messages : 9
Points : 4
Points : 4
Par défaut comportement de la fonction sfPacket_ReadString()

Bonjour,

J'ai l'impression qu'il y a peut-être un problème de comportement avec la fonction sfPacket_ReadString(), à moins que ce ne soit le comportement esconté,

Code :
CSFML_API void  sfPacket_ReadString(sfPacket* Packet, char* String);
Apparemment le paramètre String fourni doit avoir une taille supérieure ou égale aux données reçues et qui vont être placées dans ce buffer (si la taille est inférieure, j'obtiens une erreur de segmentation).

Là où je m'étonne c'est qu'il n'y a pas de paramètre 'int size' pour indiquer la taille du buffer fourni, pour éviter de faire une erreur de segmentation.
Je ne comprends pas non plus pourquoi la fonction ne retourne pas le nombre d'octets remplis dans le buffer, ce qui rend cette fonction assez difficile d'emploi, si elle est utilisée seule.

Le workaround que j'ai trouvé c'est d'utiliser sfPacket_WriteUint32() avant sfPacket_WriteString() pour indiquer la taille, et le l'autre côté faire d'abord un sfPacket_ReadUint32() puis un alloc de la taille obtenue pour fournir ce buffer à sfPacket_ReadString().

Ce qui me fait penser que ce n'est peut-être pas le comportement escompté c'est que dans le code source de Packet.cpp la longueur de la chaine est déjà enregistrée puis lue à la réception. Ce qui fait qu'avec mon astuce la taille de la chaine est enregistré en double.

Cependant c'est peut-être moi qui n'ai pas bien compris comment utiliser cette fonction.

J'ai également des résultats aléatoires lorsque je tente de transmettre du binaire qui parfois contient un octet null, ce qui s'explique de par le fait que sfPacket_WriteString() utilise '\0' pour connaitre la taille. Mais peut-être qu'on est sensé transmettre que de l'ascii ?

Si vous pouviez m'éclairer sur la question, je vous en saurais gré.
coupecoupe est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 07h14.


 
 
 
 
Partenaires

Hébergement Web