Bonjour à tous,
J'ai programmé une version très simple d'un client et d'un serveur. Cependant, le programme (testé en local) ne fonctionne pas la plupart du temps. A la suite le code posant problème.
serveur.cpp :
client.cpp :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 #include <boost/asio.hpp> #include <iostream> #include <string> using namespace boost::asio; int main (void) { boost::asio::io_service ios; ::ip::tcp::acceptor ac(ios,::ip::tcp::endpoint(::ip::tcp::endpoint(ip::tcp::v4(), 4567))); ::ip::tcp::socket s(ios); ac.accept(s); std::string buf("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque diam eros, vestibulum at auctor ut, scelerisque eu diam. Vivamus congue sem tempus, bibendum magna vel, bibendum enim. Vivamus vehicula, nisi sed porttitor fermentum, nibh ante sollicitudin mi, vel iaculis lectus mauris et nibh. Donec sapien augue, fermentum et vestibulum ut, sollicitudin tincidunt tellus. Cras molestie sapien at leo vulputate scelerisque. Nam lacus velit, iaculis vitae condimentum vitae, iaculis vel velit. Nunc vehicula, ligula nec viverra dignissim, velit mi accumsan augue, a imperdiet volutpat."); size_t size = buf.length(); s.send(::buffer(&s, sizeof(size_t))); s.send(::buffer(buf)); return 0; }
Problèmes rencontrés :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 #include <boost/asio.hpp> #include <iostream> using namespace boost::asio; int main (void) { ::io_service ios; ::ip::tcp::socket s(ios); s.connect(::ip::tcp::endpoint(::ip::address::from_string("127.0.0.1"), 4567)); size_t size = 0; s.receive(::buffer(&size, sizeof(size_t))); std::cout << "size : " << size << std::endl; char buf[size + 1]; s.receive(::buffer(buf, size)); buf[size + 1] = '\0'; std::cout << buf << std::endl; return 0; }
- la taille reçue est incorrecte ;
- une fois "reçu" le buffer est vide.
Ce que j'ai tenté :
- remplacer s.send/s.receive par write et read ;
- envoyer et recevoir le buffer par morceaux de petite taille.
Merci par avance de votre aide sachant que ce code fonctionne de temps à autre et pardon si la solution est évidente.
(PS : j'ai ce soucis dans un projet plus conséquent et je ne souhaite pas utiliser les fonctions asynchrones.)
[edit1] Correction code client.
[edit2] En testant ces deux programme par le réseaux, la taille reçue par le client est toujours la bonne, cependant le buffer reçu est désespérément vide...
Partager