C++ boost::asio编程-同步TCP详解及实例代码

2020-01-06 16:10:13丽君

客户端


// BoostTcpClient.cpp : 定义控制台应用程序的入口点。 
// 
 
#include "stdafx.h" 
#include "boost/asio.hpp" 
 
using namespace boost::asio; 
 
#ifdef _MSC_VER 
#define _WIN32_WINNT  0X0501 //避免VC下编译警告 
#endif 
 
#define PORT 1000 
#define IPV6 
//#define IPV4 
 
int _tmain(int argc, _TCHAR* argv[]) 
{ 
  // 所有asio类都需要io_service对象 
  io_service iosev; 
  // socket对象 
  ip::tcp::socket socket(iosev); 
 
  // 连接端点,这里使用了本机连接,可以修改IP地址测试远程连接 
#ifdef IPV4 
  ip::address_v4 address=ip::address_v4::from_string("127.0.0.1"); 
#endif 
 
#ifdef IPV6 
  //"0:0:0:0:0:0:0:1"为IPV6的本机回环地址,类似于"127.0.0.1" 
  ip::address_v6 address=ip::address_v6::from_string("0:0:0:0:0:0:0:1"); 
#endif 
  ip::tcp::endpoint ep(address, PORT); 
  // 连接服务器 
  boost::system::error_code ec; 
  socket.connect(ep,ec); 
  // 如果出错,打印出错信息 
  if (ec) 
  { 
    std::cout << boost::system::system_error(ec).what() << std::endl; 
    return -1; 
  } 
 
  //循环发送和接收数据 
  for(int i=0;i<5;++i) 
  { 
    //发送数据 
    socket.write_some(buffer("hello"), ec); 
    // 接收数据 
    char buf[100]; 
    size_t len=socket.read_some(buffer(buf), ec); 
    std::cout.write(buf, len); 
    Sleep(500); 
  } 
  //发送与服务端约定好的结束语,由服务端断链 
  socket.write_some(buffer("bye"), ec); 
   
  getchar(); 
  return 0; 
} 

代码中兼容了IPV4和IPV6两种IP协议,使用宏定义选择使用哪种IP协议,当然客户端和服务端的协议必须一致才能正常通信。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


注:相关教程知识阅读请移步到C++教程频道。