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:
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 !