J'essaye de faire un simple client msn principalement pour le fun mais aussi à des fins éducatives. Et j'ai commencé à essayer l'envoi et la réception de paquets tcp en utilisant Boost Asio car je veux un support multiplateforme. J'ai réussi à envoyer une commande "VER" et recevoir sa réponse. Cependant, après avoir envoyé la commande "CVR" suivante, Asio lance un "End of file" -error. Après quelques recherches plus approfondies, j'ai trouvé par reniflage de paquets que mes paquets tcp vers le serveur de messagerie avaient un caractère "nul" supplémentaire (code Ascii: 00) à la fin du message. Cela signifie que ma commande VER obtient un caractère supplémentaire à la fin que je ne pense pas que le serveur de messagerie aime et donc arrête la connexion lorsque j'essaie de lire la réponse CVR.Boost :: Asio - Supprime le caractère "null" à la fin des paquets tcp
Voici comment mon paquet ressemble quand reniflant, (il est Payload):
(Hex :) 56 45 52 20 31 20 4d 53 4E 50 31 35 20 43 56 52 30 0a 0a 00
(Char :) VER 1 MSNP15 CVR 0 ...
et voici comment paquet de Adium (chat client pour OS X) ressemble:
(Hex :) 56 45 52 20 31 20 4d 53 50 4E 31 35 20 43 56 52 30 0d 0a
(Char :) VER 1 MSNP15 CVR 0 ..
Donc, ma question est de savoir s'il y a moyen de supprimer le caractère nul à la fin de chaque paquet, si j'ai mal compris quelque chose et utilisé Asio dans le mauvais sens. Ma fonction d'écriture (légèrement modifié) ressemble Lite ceci:
int sendVERMessage() {
boost::system::error_code ignored_error;
char sendBuf[] = "VER 1 MSNP15 CVR0\r\n";
boost::asio::write(socket, boost::asio::buffer(sendBuf),
boost::asio::transfer_all(), ignored_error);
if(ignored_error) {
cout << "Failed to send to host!" << endl;
return 1;
}
cout << "VER message sent!" << endl;
return 0;
}
et de la documentation principale here sur le protocole msn j'utilise.
J'espère avoir été assez clair.
Veuillez modifier votre question pour organiser votre code correctement –