您的位置:首页 >文章内容

如何使用Boost asio实现同步的TCP/IP通信?

来源:互联网 作者:admin 时间:2020-01-08 16:08:45

  可以先了解一下Boost asio基本概念,以下是Boost asio实现的同步TCP/IP通信:

  服务器程序部分,如果想保留套接字之后继续通信,可以动态申请socket_type,保存指针,因为socket_type貌似不能拷贝:

  

如何使用Boost asio实现同步的TCP/IP通信?


  #include "stdafx.h"

  #include <iostream>

  #include <boost/asio.hpp>

  using namespace boost::asio;

  using namespace std;

  int main()

  {

  try

  {

  typedef ip::tcp::acceptor acceptor_type;

  typedef ip::tcp::endpoint endpoint_type;

  typedef ip::tcp::socket socket_type;

  std::cout<<"Server start."<<endl;

  io_service io;

  acceptor_type acceptor(io, endpoint_type(ip::tcp::v4(), 6688));

  std::cout<<acceptor.local_endpoint().address()<<endl;

  for (;;)

  {

  socket_type sock(io);

  acceptor.accept(sock);

  std::cout<<"Client";

  std::cout<<sock.remote_endpoint().address()<<endl;

  sock.send(buffer("Hello asio"));

  }

  }

  catch (std::exception &e)

  {

  std::cout<<e.what()<<endl;

  }

  return 0;

  }

 


  客户端:

 


  #include "stdafx.h"

  #include <iostream>

  #include <boost/asio.hpp>

  using namespace boost::asio;

  using namespace std;

  int main()

  {

  try

  {

  typedef ip::tcp::acceptor acceptor_type;

  typedef ip::tcp::endpoint endpoint_type;

  typedef ip::tcp::socket socket_type;

  typedef ip::address address_type;

  std::cout<<"Client start."<<endl;

  io_service io;

  socket_type sock(io);

  endpoint_type ep(address_type::from_string("127.0.0.1"), 6688);

  sock.connect(ep);

  vector<char> str(100, 0);

  boost::system::error_code ec;

  for (;;)//循环接收

  {

  sock.read_some(buffer(str), ec);

  if (ec)

  {

  break;

  }

  cout<<&str[0];

  }

  // 析构自动断开连接

  }

  catch (std::exception &e)

  {

  std::cout<<e.what()<<endl;

  }

  return 0;

  }