#include #include #include #include using namespace std; using boost::asio::ip::tcp; char* cmdname; void usage() { cerr << "Usage: " << cmdname << " server port" << endl; exit(1); } int main(int argc, char* argv[]) { // process command line arguments cmdname = *argv++; --argc; if (argc != 2) usage(); std::string server(argv[0]); std::string port(argv[1]); // connect to given server boost::asio::io_service io_service; tcp::resolver resolver(io_service); tcp::resolver::query query(server, port); tcp::socket socket(io_service); tcp::resolver::iterator end; bool opened = false; for (tcp::resolver::iterator it = resolver.resolve(query); it != end; ++it) { boost::system::error_code error; socket.connect(*it, error); if (!error) { opened = true; break; } socket.close(); } if (!opened) { cerr << cmdname << ": cannot connect to " << server << " " << port << endl; exit(1); } try { // read input (under the assumption that we get just one packet) boost::array timebuf; size_t nbytes = socket.read_some(boost::asio::buffer(timebuf)); std::cout.write(timebuf.data(), nbytes); } catch (std::exception& e) { cout << cmdname << ": server failure: " << e.what() << endl; exit(1); } }