同步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. python+selenium一:对浏览器的常规操作

    # 1.打开Firefox浏览器 from selenium import webdriverdriver = webdriver.Firefox()driver.get("https:// ...

  2. Day20 磁盘管理2之RAID卡

    1.磁盘的基本分区Gdisk 前面我们已经了解到fdisk分区,但fdisk不支持给高于2TB的磁盘进行分区.如果有单块盘高于2TB,建议使用Gdisk进行分区. 1.使用gdisk进行磁盘分区 1. ...

  3. vue2.0搭建vue手脚架(vue-cli)

    1.安装node.js 从node官网下载并安装node,安装步骤很简单,只要一路“next”就可以了.安装完成后,打开命令行工具输入命令node -v,如下图,如果出现对应版本号,就说明安装成功了. ...

  4. 面试官: 聊一聊Babel

    点击关注本公众号获取文档最新更新,并可以领取配套于本指南的 <前端面试手册> 以及最标准的简历模板. 前言 Babel 是现代 JavaScript 语法转换器,几乎在任何现代前端项目中都 ...

  5. 【全网首创】修改 Ext.ux.UploadDialog.Dialog 源码支持多选添加文件,批量上传文件

    公司老框架的一个页面需要用到文件上传,本以为修改一个配置参数即可解决,百度一番发现都在说这个第三方插件不支持文件多选功能,还有各种各样缺点,暂且不讨论这些吧.先完成领导安排下来的任务. 任务一:支持多 ...

  6. [VB.NET Tips]Select Case语句拾遗

    正常的Select 语句如下: Dim status As Integer = 5 Select Case status Case 0 Console.WriteLine("状态是:0&qu ...

  7. [Leetcode] 第338题 比特位计数

    一.题目描述 给定一个非负整数 num.对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回. 示例 1: 输入: 2 输出: [0,1,1] 示例 ...

  8. Tomcat 报错 The APR based Apache Tomcat Native library which allows optimal performance in production environmen

    这个问题在我一次重新装了tomcat和myeclipse时出现 说实话 出现这个问题头大 但是好在解决了 美滋滋 最开始到处寻找各种解决方案 最后直接注释了server.xml中的一行 直接解决这个报 ...

  9. uni-app实现滑动切换效果

    在对于uni-app框架了解之后,今天就实现一个滚动切换tab效果,这个很常见的一个效果,最后封装成一个组件,便于以后使用,写这个需要引入uni官方提供的uni.css样式,用到了写好的样式,就不需要 ...

  10. spring后台重定向方式

    1.直接返回值中加重定向:"redirect:要访问的网址"; public String updateOrAddProject() { return "redirect ...