Problèmes d'utilisation de boost::asio::async_read()
Voici le code que j'utilise:
class Server
{
.....
void Server::accepted()
{
std::cout << "Accepted!" << std::endl;
boost::array<char, 1> buf;
boost::asio::async_read(socket, boost::asio::buffer(buf),
boost::bind(&Server::handleRead, this, buf, boost::asio::placeholders::error));
}
void Server::handleRead(boost::array<char, 1> buf, const boost::system::error_code& error)
{
if(!error)
{
std::cout << "Message: " << buf.data() << std::endl;
}
else
{
std::cout << "Error occurred." << std::endl;
}
}
.....
}
Le problème est que je reçois toujours les mêmes données à partir du client: un char.
Dans mon client j'ai essayé d'envoyer un autre char, mais encore le serveur affiche le même char.
Et quand j'essaie de lire plus de 1 octets, j'obtiens une erreur que le buf
variable est utilisée avant d'être initialisé.
Vous devez vous connecter pour publier un commentaire.
Vous êtes à l'aide de la variable locale
buf
que la mémoire tampon de lecture, ce qui est dangereux et ne fonctionne pas. Aussi, vous êtes juste à l'envoi de l'original du contenu de la mémoire tampon pour le gestionnaire. Donc, au lieu de cela, vous devez utiliser un tampon avec une durée de vie plus longue. Quelque chose comme ceci:modifier: ou, alternativement, à l'aide d'un segment de mémoire tampon alloué (je ne sais pas si le code est bon, mais vous obtenez l'idée):