subscriber.cpp 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. //
  2. // blocking_tcp_echo_client.cpp
  3. // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4. //
  5. // Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
  6. //
  7. // Distributed under the Boost Software License, Version 1.0. (See accompanying
  8. // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  9. //
  10. #include <cstdlib>
  11. #include <cstring>
  12. #include <iostream>
  13. #include <boost/asio.hpp>
  14. using boost::asio::ip::tcp;
  15. enum {
  16. max_length = 1024
  17. };
  18. int main( int argc, char* argv[]) {
  19. try {
  20. if ( 3 != argc) {
  21. std::cerr << "Usage: subscriber <host> <queue>\n";
  22. return EXIT_FAILURE;
  23. }
  24. boost::asio::io_service io_service;
  25. tcp::resolver resolver( io_service);
  26. tcp::resolver::query query( tcp::v4(), argv[1], "9998");
  27. tcp::resolver::iterator iterator = resolver.resolve( query);
  28. tcp::socket s( io_service);
  29. boost::asio::connect( s, iterator);
  30. char msg[max_length];
  31. std::string queue( argv[2]);
  32. std::memset( msg, '\0', max_length);
  33. std::memcpy( msg, queue.c_str(), queue.size() );
  34. boost::asio::write( s, boost::asio::buffer( msg, max_length) );
  35. for (;;) {
  36. char reply[max_length];
  37. size_t reply_length = s.read_some( boost::asio::buffer( reply, max_length) );
  38. std::cout << "published: ";
  39. std::cout.write( reply, reply_length);
  40. std::cout << std::endl;
  41. }
  42. return EXIT_SUCCESS;
  43. } catch ( std::exception const& e) {
  44. std::cerr << "Exception: " << e.what() << "\n";
  45. }
  46. return EXIT_FAILURE;
  47. }