boost中TCP的客户端发送示例(blocking版)

来源:互联网 发布:淘宝店铺招牌源代码 编辑:程序博客网 时间:2024/05/15 09:35


//// blocking_tcp_echo_client.cpp// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~//// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com)//// Distributed under the Boost Software License, Version 1.0. (See accompanying// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)//#include <cstdlib>#include <cstring>#include <iostream>#include <boost/asio.hpp>using boost::asio::ip::tcp;enum { max_length = 1024 };int main(int argc, char* argv[]){  try  {    if (argc != 3)    {      std::cerr << "Usage: blocking_tcp_echo_client <host> <port>\n";      return 1;    }    boost::asio::io_service io_service;    tcp::resolver resolver(io_service);    tcp::resolver::query query(tcp::v4(), argv[1], argv[2]);    tcp::resolver::iterator iterator = resolver.resolve(query);    tcp::socket s(io_service);    boost::asio::connect(s, iterator);    using namespace std; // For strlen.    std::cout << "Enter message: ";    char request[max_length];    std::cin.getline(request, max_length);    size_t request_length = strlen(request);    boost::asio::write(s, boost::asio::buffer(request, request_length));    char reply[max_length];    size_t reply_length = boost::asio::read(s,        boost::asio::buffer(reply, request_length));    std::cout << "Reply is: ";    std::cout.write(reply, reply_length);    std::cout << "\n";  }  catch (std::exception& e)  {    std::cerr << "Exception: " << e.what() << "\n";  }  return 0;}


整理过后可以直接使用的函数是:直接拷贝可以集成到自己的工程:

int boost_tcp_sync_send(const char* addr,const char* port,const char* msg,const int len){  try  {    boost::asio::io_service io_service;    tcp::resolver resolver(io_service);    tcp::resolver::query query(tcp::v4(), addr, port);    tcp::resolver::iterator iterator = resolver.resolve(query);    tcp::socket s(io_service);    boost::asio::connect(s, iterator);    boost::asio::write(s, boost::asio::buffer(msg,len));  }  catch (std::exception& e)  {    std::cerr << "Exception: " << e.what() << "\n";  }  return 0;}