// test_socket.cc // robert - programme du robot 2005. {{{ // // Copyright (C) 2005 Dufour Jérémy // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Contact : // Web: %WEB% // Email: // }}} #include "server_socket.hh" #include "address.hh" #include "socket_text.hh" #include "data/data_input_file.hh" #include "data/data_buffer.hh" #include "image/raw_reader.hh" #include "image/image.hh" #include #include #include int main (int argc, char **argv) { if (argc == 3) { try { // Serveur ServerSocket ss (atoi (argv[1])); Address a; SocketText st (ss, a); st.nonblock (); // DataBuffer de reception DataBuffer db; uint8_t c = 'a'; DataBuffer dbAskImg (&c, 1, 1, DataBuffer::AskImage); st << dbAskImg; st.send (); // Reception des données while (!st.recv ()); st >> db; if (db.type () != DataBuffer::Image) throw std::runtime_error ("Echec de la transmission"); RawReader reader (db, 360, 296, Image::rgb); Image img (360, 296, Image::rgb); img.read (reader); std::ofstream file (argv[2]); file.write ((char*) img.getBuf (), img.getBufSize ()); // // Récupération des données du DataBuffer // std::vector v (db.size ()); // db.read ((uint8_t*) &v[0], db.size ()); // // Ecriture dans le fichier // std::ofstream file (argv[2]); // file.write (&v[0], v.size ()); // DataBuffer db1; // // Reception des données // while (!st.recv ()); // st >> db1; // std::cout << ">> Reçu " << db1.size () << " bits." << std::endl; // if (db1.type () != DataBuffer::Image) // throw std::runtime_error ("Echec de la transmission"); } catch (const std::runtime_error &r) { std::cerr << argv[0] << ": " << r.what () << std::endl; return 1; } } else { std::cerr << "Syntaxe: " << argv[0] << " port out_file" << std::endl; return 1; } return 0; }