Bonjour,
Alors, je dois développer un serveur TFTP en C++. Mon équipe bosse constamment avec boost, j'ai donc choisi asio pour la partie réseau.
Je suis plutôt novice en ce qui concerne la programmation réseau, et ce sont mes premiers pas avec le protocole UDP.
Comme base du serveur, j'utilise l'exemple du serveur écho async UDP.
En ouvrant un client TFTP et en faisant une demande simple:
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
28
29
30
31
32
33
34
35
36 class server { public: server(boost::asio::io_service& io_service, short port) : io_service_(io_service), socket_(io_service, udp::endpoint(udp::v4(), port)) { ... } void handle_receive_from(const boost::system::error_code& error, size_t bytes_recvd) { if (!error && bytes_recvd > 0) { socket_.async_send_to( boost::asio::buffer(data_, bytes_recvd), sender_endpoint_, boost::bind(&server::handle_send_to, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); } else { ... } } ... } private: boost::asio::io_service& io_service_; udp::socket socket_; udp::endpoint sender_endpoint_; enum { max_length = 1024 }; char data_[max_length]; };
TFTP> get truc.txt
je peut lire dans mon server (dans le bout de code plus haut), dans ma chaine data_ :
\0\x01/truc.txt\0netascii\0
C'est bien ce qui est attendu, donc jusqu'ici je suis content.
Maintenant, j'ai une question qui pourrait vous sembler triviale, mais comment je lis ça de la façon la plus "élégante" ?
Comment lire les 2 premiers bytes afin d'avoir le code d'opération (1 dans cet exemple) ?
Je n'ai jamais eu à faire ce genre de truc et j'ai du mal à trouver des infos...
Merci de m'avoir lu !
Partager