redhat enterprise 5 下的boost::asio 库应用(3)

Boost库学习4 - 网络库asio boost::asio库学习 阅读详情

既然asio以epoll为网络核心,为了认识epoll,我们来看看libev是如何工作的。


相比asio庞大的boost依赖,libev却是小巧轻便,高效。


列个demo


client:

#include "stdio.h"
#include "stdlib.h"
#include <iostream>
#include "netinet/in.h"
#include "sys/socket.h"
#include "sys/types.h"
#include "sys/wait.h"
#include "arpa/inet.h"
#include "string.h"

int _clientsock;

struct sockaddr_in c_addr;

int main(int argc, char *argv[])
{
        int port = atoi(argv[1]);

        _clientsock = socket(AF_INET,SOCK_STREAM,0);

        c_addr.sin_family=AF_INET;

        c_addr.sin_port=htons(port);//6001);

        c_addr.sin_addr.s_addr=inet_addr("127.0.0.1");

        connect(_clientsock,(struct sockaddr*)&c_addr,sizeof(struct sockaddr));

        //char str[32]="123456";
        static int x = 0;
        while(1)//x < 3)
        {
          char str[32]="123456";
          char c[32];
          sprintf(c,"%d\n",x);
          strcat(str,c);
          send(_clientsock,str,strlen(str)+1,0);
          char buffer[128]={'\0'};
          recv(_clientsock,buffer,128,0);
          printf(buffer);
          x++;
          //sleep(1000);
          getchar();
        }

        //char buffer[128]={'\0'};
        //recv(_clientsock,buffer,128,0);
        //printf(buffer);
        //close(_clientsock);
        getchar();
        return 0;
}

echoserver.cpp


编译命令:g++ -g -o echoserver -lev echoserver.cpp


注意链接上libev的静态库/动态库,究竟是哪个啊,还不清楚。


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <pthread.h>
#include "arpa/inet.h"
#include <ev.h>
#define MAXLEN 1023
#define PORT 9999
#define ADDR_IP "127.0.0.1"


int socket_init();
void accept_callback(struct ev_loop *loop, ev_io *w, int revents);
void recv_callback(struct ev_loop *loop, ev_io *w, int revents);
void write_callback(struct ev_loop *loop, ev_io *w, int revents);


int main(int argc ,char** argv)
{
 int listen;
 ev_io ev_io_watcher;
 listen=socket_init();
 struct ev_loop *loop = ev_loop_new(EVBACKEND_EPOLL);
 ev_io_init(&ev_io_watcher, accept_callback,listen, EV_READ);
 ev_io_start(loop,&ev_io_watcher); 
 ev_loop(loop,0);
 ev_loop_destroy(loop);
 return 0;
 
}

 

int socket_init()
{
 struct sockaddr_in my_addr;
 int listener;
 if ((listener = socket(AF_INET, SOCK_STREAM, 0)) == -1) 
 {
  perror("socket");
  exit(1);
 } 
 else
 {
  printf("SOCKET CREATE SUCCESS!/n");
 }
 //setnonblocking(listener);
 int so_reuseaddr=1;
 setsockopt(listener,SOL_SOCKET,SO_REUSEADDR,&so_reuseaddr,sizeof(so_reuseaddr));
 bzero(&my_addr, sizeof(my_addr));
 my_addr.sin_family = PF_INET;
 my_addr.sin_port = htons(PORT);
 my_addr.sin_addr.s_addr = inet_addr(ADDR_IP);

 if (bind(listener, (struct sockaddr *) &my_addr, sizeof(struct sockaddr))== -1) 
 {
  perror("bind error!/n");
  exit(1);
 } 
 else
 {
  printf("IP BIND SUCCESS,IP:%s/n",ADDR_IP);
 }

 if (listen(listener, 1024) == -1) 
 {
  perror("listen error!/n");
  exit(1);
 } 
 else
 {
  printf("LISTEN SUCCESS,PORT:%d/n",PORT);
 }
 return listener;
}

 

void accept_callback(struct ev_loop *loop, ev_io *w, int revents)
{
 int newfd;
 struct sockaddr_in sin;
 socklen_t addrlen = sizeof(struct sockaddr);
 ev_io* accept_watcher=(ev_io*)malloc(sizeof(ev_io));
 while ((newfd = accept(w->fd, (struct sockaddr *)&sin, &addrlen)) < 0)
 {
  if (errno == EAGAIN || errno == EWOULDBLOCK) 
  {
   //these are transient, so don't log anything.
   continue; 
  }
  else
  {
   printf("accept error.[%s]/n", strerror(errno));
   break;
  }
 }
 ev_io_init(accept_watcher,recv_callback,newfd,EV_READ);
 ev_io_start(loop,accept_watcher);
 printf("accept callback : fd :%d/n",accept_watcher->fd);
 
}

void recv_callback(struct ev_loop *loop, ev_io *w, int revents)
{
 char buffer[1024]={0};
 int ret =0;
 //ev_io write_event;
loop:
 ret=recv(w->fd,buffer,MAXLEN,0);
 if(ret > 0)
 {
  printf("recv message :%s  /n",buffer);
  
 }
 else if(ret ==0)
 {
  printf("remote socket closed!socket fd: %d/n",w->fd);
  close(w->fd);
  ev_io_stop(loop, w);
  free(w);
  return;
 }
 else
 {
  if(errno == EAGAIN ||errno == EWOULDBLOCK)
  {
    goto loop;
  }
  else
  {
   printf("ret :%d ,close socket fd : %d/n",ret,w->fd);
   close(w->fd);
   ev_io_stop(loop, w);
   free(w);
   return;
  }
 }
 int fd=w->fd;
 ev_io_stop(loop,  w);
 ev_io_init(w,write_callback,fd,EV_WRITE);
 ev_io_start(loop,w);
 printf("socket fd : %d, turn read 2 write loop! ",fd);
 
}


void write_callback(struct ev_loop *loop, ev_io *w, int revents)
{
 char buffer[1024]={0};
 //ev_io read_event;
 snprintf(buffer,1023,"this is a test!");
 write(w->fd,buffer,strlen(buffer));
 int fd=w->fd;
 ev_io_stop(loop,  w);
 ev_io_init(w,recv_callback,fd,EV_READ);
 ev_io_start(loop,w);
}


TFB 测试排名第一!这个 C++ 的 Web 框架有点东西 全球 Web 框架权威性能测试 Techempower Web Framework Benchmarks 相信大家多少都听说过,这是一个专为 Web 框架做性能排名的网站,通过物理机和云服务器上的测试来检测框架的性能。 今天推荐的这款框架就是在 Techempower Web Framework Benchmarks 的最新排名中排到了第一名,值得大家尝试和学习。 项目名称:Drogon 项目作者:an-tao 开源许可协议:MIT 项目地址:https://gitee.com/an-t. 阅读详情

相关推荐

C++ 建立本地网络服务器 (Boost.Asio库)

详细的注释讲解利用Boost库建立服务器,最终自己也写了一个具有并发功能的boost服务器,可供直接调用。

学习是一种信仰。 8662

C/C++ 网络库 boost asio 使用详解

主要讲解C/C++准标准库中的网络库asio中,掌握以及理解基本的tcp、udp的同步与异步网络编程方法

余识- 1万+

yasio:一个多平台支持的c ++ 11库,专注于任何客户端应用程序的asio(异步套接字IO)

YASIO - Y等另一个了一个同步S OCKET I / O。 yasio是一个轻量级跨平台的套接字库,专注于客户端和基于各种游戏引擎的游戏客户端网络服务,支持Windows&linux&apple&android&win10-universal。 应用案例 :已用于客户端网络传输,并已将该项目于2018年10月17日由腾讯游戏发行正式上线后稳定运行于上千万移动设备上。 :用于实现初始UDP + TCP发现更新机制。 集成案例 :将yasio集成到xlua ,:场景U3DScripting运行即可。 虚幻引擎4 :将yasio集成到虚幻引擎4 :集成到腾讯的sluaunreal :集成到腾讯的UnLua :作为Engine-x游戏引擎的异步TCP解决方案。 文件 使用g ++快速运行tcptest测试程序 g++ tests/tcp/main.cpp --std=c++11 -DYASIO_HEADER_ONLY -lpthread -I./ -o tcptest && ./tcptest 使用CMake编译yasio的测试程序和示例程序 git clone h

(原创)如何使用boost.asio写一个简单的通信程序(一)

  boost.asio相信很多人听说过,作为一个跨平台的通信库,它的性能是很出色的,然而它却谈不上好用,里面有很多地方稍不注意就会出错,要正确的用好asio还是需要花一番精力去学习和实践的,本文将通过介绍如何写一个简单的通信程序来告诉读者如何使用asio,希望对asio的初学者有所帮助。由于只是介绍其基本用法,作为例子的简单示例并不考虑很多的业务逻辑和异常处理,只是介绍基本用法,让初学者入门。 ...

weixin_34383618的博客 325

Unity资源逆向解析:从APK到AssetStudio的完整实战

本文详细介绍了Unity资源逆向解析的全流程,从APK解包到使用AssetStudio深度解析Unity游戏资源。通过实战案例演示如何提取《植物大战僵尸》等游戏的素材,包括贴图、音频和3D模型,帮助开发者掌握Unity游戏逆向工程的核心技术。

weixin_30664051的博客 475

【论文阅读1】机理引导的残差学习用于电池全生命周期状态监测 | Nature Communications

本文提出了一种机理引导的残差学习框架,用于提升电池全生命周期内荷电状态(SOC)和健康状态(SOH)的监测精度。该方法融合等效电路模型的先验知识与机器学习,设计了修正模型和补偿模型两种通用框架。实验验证表明,该方法在三种不同类型电池数据集上均表现出色,SOC和SOH估计误差较传统方法降低50%以上,且在未见工况下仍保持良好外推能力。模型具有强鲁棒性,在减少训练数据量和降低采样频率时性能稳定,并兼具物理可解释性。该框架无需离线测试和运行中校准,为电池安全监测提供了有效解决方案。

qq_21843433的博客 615

redhat enterprise 5 下的boost::asio 库应用(1)

在linux环境下编译boost & asio库,是个头疼的事情,前天搞了一天也没把asio.examples编译通。 无奈,只有重新下载独立的asio_1.4.8.zip单独编译。 1.unzip 2.make wait some seconde.... 搞定! 编译asio Example:echo g++ -g -o bclient -I/h

642

开关电源辅助电源设计全流程拆解

地类型定义包含电路功率地(PGND)高压侧地,与主功率电路地相连整流桥负极、原边电感地、UC3842的功率地信号地(SGND)低压侧地,与控制/采样电路地相连副边整流管地、TL431地、MCU/运放地。

lyzh971103的博客 1470

redhat enterprise 5 下的boost::asio 库应用(0)

最近几次业内交流,我认识了自己。 一直以来,都在windows下开发网络服务器,从单pc负载1k - 2k - 4k,网络性能也逐步提高。 但是周边的朋友,大多是在linux下开发,我就显得比较扎眼。 第一个差异就是服务端的os环境,另外就是MMORPG的逻辑处理。 其实单就os不同,确实不能衡量比较服务器的质量,萝卜青菜各有所爱。 近日饶有兴趣的

503

基于STM32与MPU6050的实时姿态检测系统设计与实现(源码+硬件解析)

本文详细介绍了基于STM32单片机与MPU6050传感器的实时姿态检测系统设计与实现。通过硬件解析、传感器校准、卡尔曼滤波算法和欧拉角计算,实现高精度姿态检测。提供完整源码和调试技巧,适用于无人机、平衡车等嵌入式开发项目,解决噪声干扰和数据漂移等常见问题。

jupi8的博客 495

N32G003学习——第九章 第三节1 串口 发送

经过第九章前2节的学习,基础打下之后,开始敲代码。

qq_34525008的博客 1034

redhat enterprise 5 下的boost::asio 库应用(2)

在熟悉asio之前,先来把bsd socket c/s模型熟悉下 client: #include "stdio.h" #include "stdlib.h" #include "netinet/in.h" #include "sys/socket.h" #include "sys/types.h" #include "sys/wait.h" #include "arpa/inet.h" i

616

基于深度学习 YOLOv11 的快递包裹检测系统(Python + PySide6 界面 + 训练代码)

成为亟需优化的重要环节。随着电子商务的快速发展,物流行业面临着越来越大的压力,为了解决这些问题,我们提出了一种。目标检测算法,实现快递包裹的。的界面,供用户进行实时监控。本项目的主要目标是利用。

斌擎科技 763

redhat enterprise 5 下的boost::asio 库应用(4)

libev的demo上篇也说到了,那么epoll到底是如何工作的呢,为了更好的接触到底层,我们直接用epoll的API来设计一个echoserver client的code和上篇一样 echoserver.cpp 如下 #include #include #include #include #include #include

525

大模型选型实战:为OpenClaw匹配最优“大脑”的全维度考量

大模型不是越贵越好,也不是参数越高越好,适合自己的使用场景才是最好的。按照我的方法,先明确自己的需求,再选对应的模型,配置多模型自动路由,既能保证体验,又能最大限度降低成本。我自己用这套配置用了半年多,不管是写文章、写代码还是处理复杂问题,都完全够用,成本也很低,大家可以参考一下。如果不知道选什么模型,可以在评论区说一下你的使用场景。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 343

【OpenClaw从入门到精通】第63篇:A股智能分析实战——用OpenClaw搭建个人量化研究助手(2026实测版)

2026年,OpenClaw已成为量化投研圈的现象级工具,八家头部券商密集发布专题研报力证其价值。传统量化投研面临技术门槛高、重复劳动多、策略迭代慢、非结构化数据处理弱四大痛点,而OpenClaw通过“AI智能体+金融Skill+量化API”的融合,实现了从数据获取、策略生成、回测验证到持仓监控的全流程自动化。本文基于2026年最新实测经验,完整呈现个人量化研究助手搭建:从阿里云部署、阿里云百炼API配置(含解析失败解决方案)、Tushare数据源接入,到PB-ROE价值选股、研报复现、自动化回测、持仓监控

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1059

boost库介绍以及使用

​ boost 库是一个优秀的,可移植的,开源的 C++ 库,它是由 C++ 标准委员会发起的,其中一些内容已经成为了下一代 C++ 标准库的内容,在 C++ 社区中影响甚大,是一个不折不扣的准标准库,它的功能十分强大,弥补了 C++ 很多功能函数处理上的不足。​ 学习链接: https://theboostcpplibraries.com/

huangwenhuan的专栏 1万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C++ Boost Asio I/O服务,I/O对象,网络编程

I/O 服务与I/O 对象 使用Boost的Asio进行异步处理数据的应用程序基于两个概念: I/O服务 I/O对象 I/O服务抽象了操作系统的接口,允许第一时间进行异步数据处理,而I/O对象则初始化特定的操作。 // I/O服务 boost::asio:io_service // 用于网络发送和接收数据 boost::asio::ip::tcp::socket // 计时器 boost::asio::deadline_timer #include<boost/asio.hpp>

灰猫丫的博客 437

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

服务端应用中的同步I/O boost asio

// gogogo.cpp : Defines the entry point for the console application. // #include "stdafx.h" #ifdef WIN32 #define _WIN32_WINNT 0x0501 #include #endif #include #include #incl

波波诸葛伟 454

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

使用protobuf设计消息协议(C++asio网络库相关)

protobuf是目前应用最广范的设计消息协议工具,具有以下一些特点: 1、proto2只支持python,c++,JAVA,proto3可以支持更多语言 2、定义协议以proto作为文件后缀名,在第一行用syntax指定proto版本 3、C++使用protobuf官方文档:http://developers.google.com/protocol-buffers/docs/cpptutoria...

昔拉的博客 2358

C 和 C++ 开源库的清单

关于 C++ 框架、库和资源的一些汇总列表,由 fffaraz 发起和维护。 内容包括:标准库、Web应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等。 标准库 C++标准库,包括了STL容器,算法和函数等。 C++ Standard Library:是一系列类和函数的集合,使用核心语言编写,也是C++ISO自身标准的一部分。 Standard Template Library:标准模板库 C POSIX library : POSIX系统的C标准库规范 ISO C++ Standa

顺其自然~专栏 1742

Boost学习之asio库的简单使用

写在前面 最近项目要实现flv视频实时播放功能,需要提供http服务,供客户端浏览器直播,因此涉及到C++开源库Boost,其中的一个库asio刚好可以满足我的需求,因此学习并移植到自己的项目中,做笔记于此。 Boost.Asio 是一个用于网络和低级 I/O 编程的跨平台 C++ 库,它使用现代 C++ 方法为开发人员提供一致的异步模型。 异步使用计时器的例子 #include <io...

Marble_ccp的博客 2477

boost.asio网络库服务端客户端程序(服务端--同步)

利用boost.asio网络库写的服务端客户端程序。 源代码如下: // Boost_TCP_Server.cpp : 此文件包含 &amp;quot;main&amp;quot; 函数。程序执行将在此处开始并结束。 // #include &amp;amp;lt;iostream&amp;amp;gt; #include &amp;amp;lt;boost/asio.hpp&amp;amp;gt;//包含io_service #include &am

Lunar_Queen的博客 849

c++常用库

c++的常用库 C++ 资源大全 关于 C++ 框架、库和资源的一些汇总列表,内容包括:标准库、Web应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等。 标准库 C++标准库,包括了STL容器,算法和函数等。 C++ Standard Library:是一系列类和函数的集合,使用核心语言编写,也是C++ISO自身标准的一部分。 Standard Template ...

Software designers are not code farmers 891

boost asio 应用方法学(二)——深入框架

要用好它,就必须先了解它,而且不能停止于表面,必须深入到内部。而了解一件事物,先要了解它的框架,再了解它的细节。了解了框架,我们就有了提纲挈领的认识。 关于 boost asio 框架结构,在其文档中,用了这样一张图来描述:   简单解释一下: 这里由使用者(Initiator)启动一个异步操作(Asynchronous Operation),在启动异步的同时它要负责创建一个异步回调对

luansxx的专栏 2万+

基于boost asio实现sync io client通信

基于boost asio库实现tcp和udp的sync io的通用功能封装

tutu_hu的博客 950
上一篇: redhat 下 安装Libev
下一篇: redhat enterprise 5 下的boost::asio 库应用(4)
yynetsdk
博客等级 码龄15年 21粉丝 46原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值