同步TCP通信服务端

#include <boost/asio.hpp>
#include <iostream>
using namespace boost::asio;
int main()
{
    try
    {
        io_service io;
        ip::tcp::endpoint ep(ip::tcp::v4(), );
        ip::tcp::acceptor acceptor(io, ep);
        while ()
        {
            ip::tcp::socket sock(io);
            acceptor.accept(sock);
            std::cout << "client:" << sock.remote_endpoint().address() << std::endl;
            sock.write_some(buffer("hello asio"));
        }
    }
    catch (std::exception& e)
    {
        std::cout << e.what() << std::endl;
    }
    return ;
}

同步Tcp通信客户端

#include <boost/asio.hpp>
#include <iostream>
#include <vector>
#include <string>
using namespace boost::asio;
int main()
{
    try
    {
        io_service io;
        ip::tcp::endpoint ep(ip::address::from_string("127.0.0.1"), );
        ip::tcp::socket sock(io);
        sock.connect(ep);
        char str[];
        sock.read_some(buffer(str));
        std::cout << "receive from" << sock.remote_endpoint().address() << std::endl;;
        std::cout << str << std::endl;
    }
    catch (std::exception& e)
    {
        std::cout << e.what() << std::endl;
    }
    getchar();
    return ;
}
// BoostTcpServer.cpp : 定义控制台应用程序的入口点。 
// 
  
#include "stdafx.h" 
#include "boost/asio.hpp" 
#include "boost/thread.hpp" 
  
using namespace std; 
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; 
  
  //创建用于接收客户端连接的acceptor对象 
#ifdef IPV4 
  ip::tcp::acceptor acceptor(iosev,ip::tcp::endpoint(ip::tcp::v4(), PORT)); 
#endif 
  
#ifdef IPV6 
  ip::tcp::acceptor acceptor(iosev,ip::tcp::endpoint(ip::tcp::v6(), PORT)); 
#endif 
  
  while (true) 
  { 
    // socket对象 
    ip::tcp::socket socket(iosev); 
    // 等待直到客户端连接进来 
    acceptor.accept(socket); 
    // 显示连接进来的客户端 
    std::cout <<"remote ip:"<<socket.remote_endpoint().address()<<endl; 
    std::cout <<"remote port:"<<socket.remote_endpoint().port() << std::endl; 
  
    char buf[]; 
    boost::system::error_code ec; 
    while() 
    { 
      socket.read_some(buffer(buf),ec); 
      if (ec) 
      { 
        std::cout <<boost::system::system_error(ec).what() << std::endl; 
        break ; 
      } 
      std::cout<<"recv msg:"<<buf<<endl; 
      if(strcmp(buf,"bye")==)//收到结束消息结束客户端连接 
      { 
        break; 
      } 
      socket.write_some(buffer("I heared you!\n"),ec); 
      if (ec) 
      { 
        std::cout <<boost::system::system_error(ec).what() << std::endl; 
        break ; 
      } 
    } 
    socket.close(); 
    // 与当前客户交互完成后循环继续等待下一客户连接 
  } 
  return ; 
#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 -; 
  } 
  
  //循环发送和接收数据 
  for(int i=;i<;++i) 
  { 
    //发送数据 
    socket.write_some(buffer("hello"), ec); 
    // 接收数据 
    char buf[]; 
    size_t len=socket.read_some(buffer(buf), ec); 
    std::cout.write(buf, len); 
    Sleep(); 
  } 
  //发送与服务端约定好的结束语,由服务端断链 
  socket.write_some(buffer("bye"), ec); 
    
  getchar(); 
  return ; 

boost::asio::tcp的更多相关文章

  1. boost asio tcp server 拆分

    从官方给出的示例中对于 boost::asio::ip::tcp::acceptor 类的使用,是直接使用构造函数进行构造对象,这一种方法用来学习是一个不错的方式. 但是要用它来做项目却是不能够满足我 ...

  2. qt+boost::asio+tcp文件传输

    客户端: void qt_boost::pbSendFileClicked(){ QString filename = ui.leFileName->text(); QByteArray ba ...

  3. boost asio tcp 多线程

    common/pools.h // common/pools.h #pragma once #include <string> #include <boost/pool/pool.h ...

  4. boost asio tcp 多线程异步读写,服务器与客户端。

    // server.cpp #if 0 多个线程对同一个io_service 对象处理 用到第三方库:log4cplus, google::protobuf 用到C++11的特性,Windows 需要 ...

  5. 使用Boost asio实现同步的TCP/IP通信

    可以先了解一下Boost asio基本概念,以下是Boost asio实现的同步TCP/IP通信: 服务器程序部分,如果想保留套接字之后继续通信,可以动态申请socket_type,保存指针,因为so ...

  6. 使用Boost asio实现异步的TCP/IP通信

    可以先了解一下Boost asio基本概念,以下是Boost asio实现的异步TCP/IP通信: 服务器: #include "stdafx.h" #include <io ...

  7. boost asio 异步实现tcp通讯

    ---恢复内容开始--- asioboost   目录(?)[-] 一前言 二实现思路 通讯包数据结构 连接对象 连接管理器 服务器端的实现 对象串行化   一.前言 boost asio可算是一个简 ...

  8. boost asio 学习(七) 网络基础 连接器和接收器(TCP示例)

    http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting- started-with-boostasio?pg=8 7. Net ...

  9. boost::asio::ip::tcp实现网络通信的小例子

    同步方式: Boost.Asio是一个跨平台的网络及底层IO的C++编程库,它使用现代C++手法实现了统一的异步调用模型. 头文件 #include <boost/asio.hpp> 名空 ...

随机推荐

  1. u盘重装ubuntu16.04过程遇到的问题

    该博文主要记录ubuntu16.04重装过程中分区问题 1. /swap交换区,Logical(逻辑分区),swap area; 一般为物理内存的2倍; 例如你电脑的运行内存是4G, 则/swap可以 ...

  2. 手把手教你使用Java实现一个神经网络

    首先看一下运行效果: 下面是项目整体目录: 0.实现神经网络总览 神经网络由层.神经元.权重.激活函数和偏置组成.每层都有一个或者多个神经元,每一个神经元都和神经输入/输出连接,这些连接就是权重. 需 ...

  3. 【带着canvas去流浪(14)】Three.js中凹浮雕模型的生成方式

    目录 一. 方案1:ThreeBSP.js或ThreeCSG.js扩展库 二. 方案2:平面镂空模型拉伸 三. 方案3:Cinema 4D建模后输出模型文件 示例代码托管在:http://www.gi ...

  4. 一个简单的jquery ajax表单提交 带数据校验 layer弹框提示

    <input type="hidden" id="url" value="index.php"/> <form id=&q ...

  5. spring基础学习01

    spring基础 Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用 IOC控制反转 把创建对象和维护对象之间的关系权利 ...

  6. 阿里云安装RocketMQ

    说明: 我的阿里云是centos 6.9 jdk 1.8.0_192-b12(安装教程参照:https://www.cnblogs.com/kingsonfu/p/9801556.html) mave ...

  7. 如何让谷歌浏览器支持小于12px的字体

    CSS3有个新的属性transform,而我们用到的就是transform:scale() 书写一段代码 <body> <p>我是一个小于12PX的字体</p> & ...

  8. VS2010连接Oracle配置

    直接看上图.EZ连接和TNS连接.TNS连接要修改tnsnames.tns文件内部的host为服务器地址

  9. bootstrap具体知识点(2)

    3.以移动设备为优先 <meta name=”viewport” content=”width=device-width,initial-scale=1,user-scalable=no”> ...

  10. 死磕 java线程系列之自己动手写一个线程池

    欢迎关注我的公众号"彤哥读源码",查看更多源码系列文章, 与彤哥一起畅游源码的海洋. (手机横屏看源码更方便) 问题 (1)自己动手写一个线程池需要考虑哪些因素? (2)自己动手写 ...