On récapépète depuis le bédut
(Qui connais Garcimore ?)
Sur l'arduino tu fait
itoa(valLdr, ReplyBuffer, 10);
Donc si valLdr vaut par exemple 123, tu écris dans ReplyBuffer les char/octets suivants : '1', '2', '3', '\0' car itoa() est bien élévé et ajoute le caractère de fin de chaîne.
Ensuite tu fait :
Udp.write(ReplyBuffer);
Et là il faut remonter la hiérarchie de classe UdpClient -> Client -> Stream -> Print pour trouver que :
Print::write( char *p ) { return write( (uint8_t*)p, strlen( p ) ); }
Donc en écrivant ta ligne ci-dessus, c'est comme si tu avais écrit :
Udp.write( (uint8_t*)ReplyBuffer , strlen(ReplyBuffer) );
Mais comme chacun sait, strlen() ne compte pas le zéro terminal donc tu ne transmet que les caractères '1', '2' et '3'.
Quand çà arrive sur l'iPhone, ces 3 octets sont écrits dans buf et seulement ceux-ci. Le 4ème octet et les suivants de buf sont inconnus.
Donc la chaîne n'est pas terminée.
A cela 2 solutions :
- Soit s'assurer que le \0 terminal soit toujours envoyé depuis l'Arduino.
- Soit ajouter le \0 terminal à l'arrivée.
Il reste une 3eme écriture du code qui est peut être la plus élégante :
memset( buf, 0, sizeof(buf) );
msg1 = recv(s,buf,sizeof(buf),MSG_WAITALL);
En s'assurant que buf est initialisé à zéro avant la réception, ça marche bien aussi.
Bon Week-end