publisher.cpp 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  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: publisher <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], "9997");
  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. std::cout << "publish: ";
  37. char request[max_length];
  38. std::cin.getline( request, max_length);
  39. boost::asio::write( s, boost::asio::buffer( request, max_length) );
  40. }
  41. return EXIT_SUCCESS;
  42. } catch ( std::exception const& e) {
  43. std::cerr << "Exception: " << e.what() << "\n";
  44. }
  45. return EXIT_FAILURE;
  46. }