OVH Cloud OVH Cloud

Socket et send()

2 réponses
Avatar
Kybla
Bonjour,

Je ne sais pas si je m'adresse à la bonne liste mais j'ai un problème
qui concerne entre autre python.

Je développe pour un petit projet personnel un serveur en python.
J'utilise pour cela les sockets. Les clients sont développé en C et sont
déstinés à tourner sur des machines windows tandis que le serveur tourne
sur linux.

Mon problème est que dans mon client lorsque je fais un recv() pour lire
ce que transmet le serveur (avec send()) j'ai l'impréssion qu'il ne
trouve pas le caractere NULL signifiant la fin de la chaine de caractère
car il affiche l'ensemble de mon buffer (des caractères aléatoires).

De plus lorsque j'utilise send() (toujours dans le serveur) pour envoyer
une chaine de caractere, mon client reçoit celle ci découpée.

Je ne sais pas si j'ai étais assez clair. Si quelqu'un peut m'aider je
lui en serait reconnaissant :)

2 réponses

Avatar
Kybla
J'ai trouvé mon erreur. Elle venait de mon client Windows, désolé.
Avatar
Michel Claveau
Bonjour !

Tant mieux, que tu ait trouvé.

Néanmoins, je pense qu'il faut rappeler que le caractère zéro, pour
terminer une chaîne, si c'est une façon de faire très souvent utilisée
en C, ne correspond pas à la façon dont Python traite les chaînes.

En Python, la taille est connue par le langage, et non terminée par un
chr(0). Une chaîne peut d'ailleurs contenir des chr(0).

Donc, pour un serveur TCP/IP, si le chr(0) est nécessaire, doit être
envoyé explicitement.
Mais, alors, il faudra penser au cas des chaînes contenant
effectivement des chr(0)... par exemple, une image contenant du noir.


Quand au découpage, il peut venir du découpage des trames, dans TCP/IP

@+

Michel Claveau

--
@-salutations

Michel Claveau