ACE_Proactor

news2025/1/18 6:54:33

服务端代码:

#include "stdafx.h"
#include <iostream>
#include "ace/Message_Queue.h"
#include "ace/Asynch_IO.h"
#include "ace/OS.h"
#include "ace/Proactor.h"
#include "ace/Asynch_Acceptor.h"
using namespace  std;
class HA_Proactive_Service :public ACE_Service_Handler
{
public:
    ~HA_Proactive_Service()
    {
        if (this->handle() != ACE_INVALID_HANDLE)
        {
            //ACE_OS:closesocket();
        }
    }
    virtual void open(ACE_HANDLE h, ACE_Message_Block&)
    {
        this->handle(h);
        if (this->reader_.open(*this) != 0 || this->writer_.open(*this) != 0)
        {
            delete this;
            return;
        }
        ACE_Message_Block* mb;
        ACE_NEW_NORETURN(mb, ACE_Message_Block(1024));
        if (this->reader_.read(*mb, mb->space()) != 0)
        {
            printf("read fail");
            mb->release();
            delete this;
            return;
        }
    }
    virtual void handle_read_stream(const  ACE_Asynch_Read_Stream::Result & result)
    {
            ACE_Message_Block& mb = result.message_block();
            if (!result.success() || result.bytes_transferred() == 0)
            {
                mb.release();
                delete this;
            }
            else
            {
                mb.copy("");    //为字符串添加结束标记'/0'   
                ACE_OS::printf("rev:%s\n", mb.rd_ptr());
                if ((this->writer_.write(mb, mb.length())) != 0)
                {
                    printf("write fail");
                    mb.release();
                }
                else
                {
                    printf("Before ACE_NEW_NORETURN\n");
                    ACE_Message_Block* new_mb;
                    ACE_NEW_NORETURN(new_mb, ACE_Message_Block(1024));
                    this->reader_.read(*new_mb, new_mb->space());
                }
            }
            return;
    }
    virtual void handle_write_stream(const ACE_Asynch_Write_Stream::Result & result)
        {
            printf("Enter handle_write_stream\n");
            result.message_block().release();
            return;
        }
    

    private:
        ACE_Asynch_Read_Stream reader_;
        ACE_Asynch_Write_Stream writer_;
};

int main(int argc,char *argv[])
{
    printf("Enter main\n");
    int port = 3000;
    ACE_Asynch_Acceptor<HA_Proactive_Service>acceptor;
    if (acceptor.open(ACE_INET_Addr(port)) == -1)
    return -1;
    while (true)
        ACE_Proactor::instance()->handle_events();
    return 0;
}

客户端代码:

#include "stdafx.h"
#include <iostream>
#include "ace/Message_Queue.h"
#include "ace/Asynch_IO.h"
#include "ace/OS.h"
#include "ace/Proactor.h"
#include "ace/Asynch_Acceptor.h"
#include "ace/Asynch_Connector.h"
using namespace std;
class HA_Proactive_Service :public ACE_Service_Handler
{
public:
    ~HA_Proactive_Service()
    {
        if (this->handle() != ACE_INVALID_HANDLE)
        {
            //ACE_OS:closesocket();
        }
    }
    virtual void open(ACE_HANDLE h, ACE_Message_Block&)
    {
        this->handle(h);
        if (this->writer_.open(*this) != 0)
        {
            delete this;
            return;
        }
        printf("connected\n");
        for(int i = 0; i < 10; i++)
        {
            printf("i is %d\n", i);
            ACE_OS::sleep(1);
            time_t now = ACE_OS::gettimeofday().sec();
            char* time = ctime(&now);
            ACE_Message_Block* mb = new ACE_Message_Block(100);
            mb->copy(time);
            if (this->writer_.write(*mb,mb->length()) != 0)
            {
                printf("Begin write fail\n");
                delete this; 
                return;
            }
        }
        return;
    }
    virtual void  handle_write_dgram(const  ACE_Asynch_Read_Stream::Result& result)
    //virtual void handle_write_stream(const  ACE_Asynch_Read_Stream::Result& result)
    {
        printf("Enter  handle_write_dgram");
        ACE_Message_Block& mb = result.message_block();
        mb.release();
        return;
    }

private:
    ACE_Asynch_Write_Stream writer_;
    ACE_Asynch_Read_Stream reader_;
};

int main(int argc, char* argv[])
{

    ACE_INET_Addr addr(3000, "192.168.31.235");
    HA_Proactive_Service* Client = new HA_Proactive_Service();
    ACE_Asynch_Connector<HA_Proactive_Service>connector;
    connector.open();
    if (connector.connect(addr) == -1)
    {
        return -1;
    }
    while (true)
    {
        ACE_Proactor::instance()->handle_events();
    }
    return 0;
}

服务端打印:

客户端打印:

1)ACE_Service_Handler 是框架提供的接口,而Open,handle_read_stream,handle_write_stream就是接口的模版函数。

2)流操作和处理函数都使用了同一个类:ACE_Asynch_Read_Stream类,对于UDP流,只要使用ACE_Asynch_Read_Dgram类即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/944023.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

knife4j 整合 springboot

官方文档&#xff1a;https://doc.xiaominfo.com/knife4j 版本兼容说明&#xff1a;https://doc.xiaominfo.com/docs/quick-start/start-knife4j-version 升级说明&#xff1a;https://doc.xiaominfo.com/docs/upgrading/upgrading-to-v4版本兼容惯关系&#xff1a; springboot…

【微信小程序】小程序隐私保护指引设置

首先了解官方提供demo&#xff1a; demo1: 演示使用 wx.getPrivacySetting 和 <button open-type"agreePrivacyAuthorization"> 在首页处理隐私弹窗逻辑 https://developers.weixin.qq.com/s/gi71sGm67hK0 demo2: 演示使用 wx.onNeedPrivacyAuthorization 和…

Python面试:什么是GIL

1. GIL (Global Interpreter lock)可以避免多个线程同时执行字节码。 import threadinglock threading.Lock()n [0]def foo():with lock:n[0] n[0] 1n[0] n[0] 1threads [] for i in range(5000):t threading.Thread(targetfoo)threads.append(t)for t in threads:t.s…

深入解析文件系统原理(inode,软硬链接区别)

第四阶段提升 时 间&#xff1a;2023年8月29日 参加人&#xff1a;全班人员 内 容&#xff1a; 深入解析文件系统原理 目录 一、Inode and Block概述 &#xff08;一&#xff09;查看文件的inode信息&#xff1a;stat &#xff08;二&#xff09;Atime、Mtime、Ctime详…

高精度 低纹波|12A大电流电源解决方案,网通、视频显示、国产PC行业多领域适用

随着科技的快速发展&#xff0c;各行业产品都在不断迭代和加速升级&#xff0c;TV产品也不例外。TV产品的演变一直朝着大尺寸、高分辨率的方向发展&#xff0c;从2K到4K再升级至8K&#xff0c;每一次的升级都为消费者带来更好的视觉体验。 从技术层面来看&#xff0c;“8K大尺寸…

RocketMQ消息查询

区别于消息消费&#xff1a;先尝后买 尝就是消息查询 买&#xff1a;消息的消费 RocketMQ支持按照下面两种维度("按照Message ld查询消息"、"按照Message Key查询消息")进行消息查询。 1按照Messageld查询消息 Msgld总共16字节&#xff0c;包含消息存储…

[Mac软件]Adobe After Effects 2023 v23.5 中文苹果电脑版(支持M1)

After Effects是动画图形和视觉效果的行业标准。由运动设计师、平面设计师和视频编辑用于创建复杂的动画图形和视觉上吸引人的视频。 创建动画图形 使用预设样式为文本和图形添加动画效果&#xff0c;或逐帧调整它们。编辑、添加深度、制作动画或转换为可编辑的路径&#xff…

冠达管理:美股涨了!“越南特斯拉”市值直追丰田!这一论坛将召开

当地时间8月28日&#xff0c;美股三大股指团体收涨&#xff0c;到收盘&#xff0c;道指报34559.98点&#xff0c;涨0.62%&#xff1b;标普500指数报4433.31点&#xff0c;涨0.63%&#xff1b;纳指报13705.13点&#xff0c;涨0.84%。 高盛上星期五发布的数据显现&#xff0c;在英…

聚焦数据安全,“2023数据安全平台神兽企业”调研正式启动

当下&#xff0c;数字经济正蓬勃发展&#xff0c;数据已成为关键驱动力&#xff0c;而数据安全是保障数据要素价值的前提。数据安全建设也正在从孤立的数据安全产品过渡到数据安全平台&#xff0c;以更大程度促进数据的业务利用率和价值。 为了更好洞察和反映当前数据安全平台…

开发工具——IDE安装 / IDEA子module依赖导入失败编译提示xx找不到符号 / IDEA在Git提交时卡顿

近期换了工作电脑&#xff0c;公司的IT团队不够给力&#xff0c;不能复制电脑系统&#xff0c;所以又到了需要重装IDE配置开发环境的时候了&#xff1b;在安装和导入Java编译器IDEA的时候遇到一些"棘手"问题&#xff0c;这里整理下解决方法以备不时之需&#xff1b; …

bootloader串口更新程序[瑕疵学习板]

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、储备知识二、程序步骤2.程序展示1.bootloader2.然后是主运行函数总结前言 很久没有更新文章了。最近工作太忙,没有学习很多的知识,然后这两天不忙了,就学习了一下bootloader的程序升级…

hive lateral view 实践记录(Array和Map数据类型)

目录 一、Array 1.建表并插入数据 2.lateral view explode 二、Map 1、建表并插入数据 2、lateral view explode() 3、查询数据 一、Array 1.建表并插入数据 正确插入数据&#xff1a; create table tmp.test_lateral_view_movie_230829(movie string,category array&…

基于水基湍流算法优化的BP神经网络(预测应用) - 附代码

基于水基湍流算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码 文章目录 基于水基湍流算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码1.数据介绍2.水基湍流优化BP神经网络2.1 BP神经网络参数设置2.2 水基湍流算法应用 4.测试结果&#xff1a;5…

搭建自己的ChatGPT智能问答,HelpLook ChatBot 正式上线!

基于已有内容的站点或现成文档 零代码快速导入 即可生成自己专属的ChatGPT智能问答机器人 HelpLook ChatBot&#xff0c;正式发布上线&#xff01; 只需连接您的数据源&#xff0c;HelpLook 就能为您的数据创建一个类似 ChatGPT 的聊天机器人。您可以将它作为小工具以 JS 的…

【计算机网络】TCP 的三次握手和四次挥手

TCP 是面向连接的&#xff0c;面向连接就是数据通讯的时候需要进行三次握手&#xff0c;断开通讯的时候需要进行四次挥手。 1.seq(sequence number)&#xff0c;序列号&#xff0c;随机生成的 2.ack(acknowledgement number)&#xff0c;确认号&#xff0c;ackseq1 3.ACK(ackno…

Could not autowire. No beans of ‘DiscoveryClient‘ type found.

一、导错了包 DiscoveryClient对应有两个包&#xff1a; org.springframework.cloud.client.discovery.DiscoveryClient; com.netflix.discovery.DiscoveryClient; 目前导入的包是&#xff1a; 改成第一个包&#xff0c;发现不再报红了。

数据安全治理方案

数据安全能力建设工作并非从零开始&#xff0c;大部分组织在此前或多或少已有一些安全体系&#xff0c;基本上是围绕 信息系统和网络环境开展安全保护工作&#xff0c;主要聚焦在信息安全和网络安全&#xff1b;而数据安全是以数据为核心&#xff0c; 围绕数据安全生命周期进行…

【Java】知识点回顾

&#x1f384;欢迎来到边境矢梦的csdn博文&#x1f384; &#x1f384;本文主要梳理后端技术的Java的知识点以及回顾Java基础&#x1f384; &#x1f308;我是边境矢梦&#xff0c;一个正在为秋招和算法竞赛做准备的学生&#x1f308; &#x1f386;喜欢的朋友可以关注一下&…

SpringBootWeb 登录认证[Cookie + Session + Token + Filter + Interceptor]

目录 1. 登录功能 1.1 需求 1.2 接口文档 1.3 登录 - 思路分析 1.4 功能开发 1.5 测试 2. 登录校验 2.1 问题分析 什么是登录校验&#xff1f; 我们要完成以上登录校验的操作&#xff0c;会涉及到Web开发中的两个技术&#xff1a; 2.2 会话技术 2.2.1 会话技术介绍…

移动云发布长三角信创云电脑资源池

8月27日&#xff0c;2023长三角算力发展大会在苏州举行。中国移动云能力中心与江苏移动苏州分公司同期联合举办“移动云算力网络分论坛”&#xff0c;与各界领导、行业专家、领军企业家等分享了移动云算力调度能力新型应用、移动云“五岳”量子计算云平台的最新进展&#xff0c…