【Asio】客户端结构

(点击上方公众号,可快速关注)

完整的网络通信涉及到IO操作,而IO操作在Asio中是一个大头,后面会花大篇章介绍。这篇主要呈现在Asio下,简单的客户端的代码结构是什么样的,毕竟准备内容也这么多了。还是之前提到的,Asio网络通信【主要是同步模式】跟socket编程非常相似,甚至函数名都相似。

UDP客户端

#include <boost/asio.hpp>
#include <iostream>


using namespace boost;


int main()
{
  // 指定服务器的IP和端口
  std::string raw_ip_address = "127.0.0.1";
  unsigned short port_num = 3333;


  try {
    // 创建端点
    asio::ip::udp::endpoint
      ep(asio::ip::make_address(raw_ip_address),
      port_num);


    // 创建主动socket
    asio::io_context ioc;
    asio::ip::udp::socket sock(ioc, ep.protocol());


    // 给服务器发送消息
        
    // 接收服务器的返回
        
   // 处理服务器的返回
  }
  catch (system::system_error &e) {
    std::cout << "Error occured! Error code = " << e.code()
      << ". Message: " << e.what();


    return e.code().value();
  }


  return 0;
}

简单的UDP客户端的主要流程包含以上几步:

  • 指定服务器的IP和端口创建端点创建主动socket

    这几部分已经做了介绍。

  • 给服务器发送消息接收服务器的返回

    需要使用一些IO函数,类似于socket编程中的sendsendtorecvrecvfrom等函数。

  • 处理服务器的返回

    跟具体的需求相关,如,echotime等客户端仅仅是将服务器的返回展示到终端,而现实中的业务逻辑则可能比较复杂。

TCP客户端

TCPUDP最大的不同,TCP是面向连接的,在通信之前要专门建立两个通信节点之间的通道,在socket中我们使用connect函数:

#include <sys/socket.h>


int connect(int socket, const struct sockaddr *address, 
socklen_t address_len);

在Asio中的函数名也是connect,使用起来也很方便。

// 抛异常
void connect(const endpoint_type & peer_endpoint);
// 不抛异常
void connect(const endpoint_type & peer_endpoint, 
boost::system::error_code & ec);

代码跟UDP类似,只是多了建虚拟连接的过程。

#include <boost/asio.hpp>
#include <iostream>


using namespace boost;


int main()
{
  // 指定服务器的IP和端口
  std::string raw_ip_address = "127.0.0.1";
  unsigned short port_num = 3333;


  try {
    // 创建端点
    asio::ip::tcp::endpoint
      ep(asio::ip::make_address(raw_ip_address),
      port_num);


    // 创建主动socket
    asio::io_context ioc;
    asio::ip::tcp::socket sock(ioc, ep.protocol());


    // 建立虚拟连接
    sock.connect(ep);
        
    // 给服务器发送消息
        
    // 接收服务器的返回
        
    // 处理服务器的返回
  }
  catch (system::system_error &e) {
    std::cout << "Error occured! Error code = " << e.code()
      << ". Message: " << e.what();


    return e.code().value();
  }


  return 0;
}
喜欢我的文章,请关注我的公众号。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.为什么要使用海豚蓝牙音箱,能带给我什么样的音乐体验 目前市面上的蓝牙音箱基本上是一个全频段的喇叭来播放CD音质的音乐,如果是立体声的是不能通过一个喇叭来播放,无法实现空间上的立体效果,必须像漫步者的2.1级音箱一样,总共有有三个喇叭,两个卫星箱一个超重低音音箱来重现立体声,但传统的音箱体积庞大携带性比较差,于是海豚蓝牙ASIO驱动软件应运而生,解决这些让人困扰的问题。 2.使用海豚蓝牙ASIO软件有什么样的音乐体验呢? a.声音来源干净无Windows操作系统干扰,由于采用的是独占式音频通道,音频流采用的是来自于Windows的内核流,没有经过Windows的过滤器,声音采样值直接输出到声卡,声音输出比较干净未遭到破坏,满足音乐发烧友的完美音质的口味。 b.直接驱动多个蓝牙音箱实现直正的立体声效果,让您听不出来音箱放在何处,实现空间上的3D环绕效果,如果采用的蓝牙箱重低音效果不错的话,能够带给你无法语言表达的震撼效果,您可以试试播放《天之大-韩红》这首曲子。 c.适合于户外开展训练活动,您不需要携带笨重的音箱进行彩排训练,效果可以与专业级音箱相媲美,无需220V电源也可以把活动搞起来! 3. 安装必读 本版本软件是PC版本,需要安装在Windows XP/WIN7/WIN8/WIN10 操作系统上,支持主流的音乐播放软件,如百度音乐、QQ音乐、酷狗音乐、foobar2000等,只要音乐播放软件支持ASIO驱动就可以使用本软件。 硬件要求: a.适配绝大部分市面上标准音箱,像科凌的A8/A5、爱度、力勤、雅兰仕等音箱,尽量选用同款同型号音箱,否则输出延时差别较大影响音乐体验。 b.笔记本/台式机需要支持蓝牙,没有蓝牙功能可以到淘宝上购买蓝牙适配器,插在USB上即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值