Client:

#include "ace/Log_Msg.h"
#include "ace/OS.h"
#include "ace/Service_Config.h"
#include "ace/Event_Handler.h"
#include "ace/Reactor.h"
#include "ace/Svc_Handler.h"
#include "ace/SOCK_Stream.h"
#include "ace/Connector.h"
#include "ace/SOCK_Connector.h"

class CClientHandler : public ACE_Svc_Handler <ACE_SOCK_STREAM, ACE_NULL_SYNCH>
{
private:
	char* data;
	static const int stDataSize = 64;

public:
	CClientHandler()
	{
		data = new char[stDataSize];
	}
	int open(void*)
	{
		ACE_DEBUG((LM_DEBUG,ACE_TEXT("client connection established.\n")));
		ACE_Reactor::instance()->register_handler(this, ACE_Event_Handler::READ_MASK);
		char *message = "Client connected successfully in client.\n";
		peer().send(message, strlen(message) + 1);
		return 0;
	}
	int handle_input(ACE_HANDLE)
	{
		peer().recv(data, stDataSize);
		ACE_DEBUG((LM_DEBUG, "data:%s\n", data));
		return 0;
	}
};

int main(int argc, char* argv[])
{
	const int cPort = 12344;
	ACE_INET_Addr addr(cPort, "localhost");
	ACE_Connector<CClientHandler, ACE_SOCK_CONNECTOR> connector;
	CClientHandler *handler = new CClientHandler();
	if(connector.connect(handler, addr) == -1)
	{
		ACE_ERROR((LM_ERROR, "%P|%t, %s", "Connection failed.\n"));
	}
	ACE_Reactor::run_event_loop();
	return 0;
}

  Server:

#include "ace/Log_Msg.h"
#include "ace/OS.h"
#include "ace/Service_Config.h"
#include "ace/Event_Handler.h"
#include "ace/Reactor.h"
#include "ace/Svc_Handler.h"
#include "ace/SOCK_Stream.h"
#include "ace/Acceptor.h"
#include "ace/SOCK_Acceptor.h"

class CServerHandler : public ACE_Svc_Handler<ACE_SOCK_STREAM, ACE_NULL_SYNCH>
{
private:
	char* data;
	static const int stDataSize = 64;
public:
	CServerHandler()
	{
		data = new char[stDataSize];
	}

	int open(void *)
	{
		ACE_DEBUG((LM_INFO, "%P|%t, %s", "Server Connection established.\n"));
		ACE_Reactor::instance()->register_handler(this, ACE_Event_Handler::READ_MASK);
		char *message = "Client connected successfully in server.\n";
		peer().send(message, strlen(message) + 1);
		return 0;
	}

	int handle_input(ACE_HANDLE)
	{
		ssize_t recv_size = peer().recv(data, stDataSize);
		if (recv_size <= 0)
		{
			ACE_DEBUG((LM_WARNING, " No data received.\n"));
		}
		else
		{
			ACE_DEBUG((LM_DEBUG, "data:%s\n", data));
			char *message = "Request is processed successfully!\n";
			peer().send(message, strlen(message) + 1);
		}
		return 0;
	}
};

int main(int argc, char* argv[])
{
	ACE_DEBUG((LM_DEBUG,"Test server running...\n"));
	const int cPort = 12344;
	ACE_INET_Addr addr(cPort);

	ACE_Acceptor<CServerHandler, ACE_SOCK_ACCEPTOR> acceptor;
	if (acceptor.open(addr) == -1)
	{
		ACE_DEBUG((LM_WARNING, "Accept error.\n"));
	}
	ACE_Reactor::run_event_loop();
	return 0;
}

  

Ace(二)Demo示例的更多相关文章

  1. Demo 示例控制输入光标位置

    <!DOCTYPE html> <html> <head> <meta charset=utf-8 /> <meta name="aut ...

  2. Ext简单demo示例

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  3. 【分享】Vue 资源典藏(UI组件、开发框架、服务端、辅助工具、应用实例、Demo示例)

    Vue 资源典藏,包括:UI组件 开发框架 服务端 辅助工具 应用实例 Demo示例 element ★11612 - 饿了么出品的Vue2的web UI工具套件 Vux ★7503 - 基于Vue和 ...

  4. kafka_2.11-0.8.2.1+java 生产消费程序demo示例

      Kafka学习8_kafka java 生产消费程序demo示例 kafka是吞吐量巨大的一个消息系统,它是用scala写的,和普通的消息的生产消费还有所不同,写了个demo程序供大家参考.kaf ...

  5. SpringBoot整合Swagger2(Demo示例)

    写在前面 由于公司项目采用前后端分离,维护接口文档基本上是必不可少的工作.一个理想的状态是设计好后,接口文档发给前端和后端,大伙按照既定的规则各自开发,开发好了对接上了就可以上线了.当然这是一种非常理 ...

  6. Vue UI组件 开发框架 服务端 辅助工具 应用实例 Demo示例

    Vue UI组件 开发框架 服务端 辅助工具 应用实例 Demo示例 element ★11612 - 饿了么出品的Vue2的web UI工具套件 Vux ★7503 - 基于Vue和WeUI的组件库 ...

  7. Echarts图表常用功能配置,Demo示例

    先看下效果图: 就如上图所示,都是些常用的基本配置. Legend分页,X轴设置,Y轴设置,底部缩放条设置, 数值显示样式设置,工具箱设置,自定义工具按钮, 绑定点击事件等等.这些配置代码中都做了简单 ...

  8. Java微信扫描支付模式二Demo ,整合官网直接运行版本

    概述 场景介绍 用户使用微信“扫一扫”扫描二维码后,获取商品支付信息,引导用户完成支付. 详细 代码下载:http://www.demodashi.com/demo/13880.html 一.相关配置 ...

  9. 微信公众号 扫码支付 模式二 demo

    扫码支付 本文附有代码,在下方,如果不熟悉场景的可以看看下面的场景介绍 场景介绍 官网介绍地址:https://pay.weixin.qq.com/wiki/doc/api/native.php?ch ...

随机推荐

  1. Python的格式化输出,基本运算符,编码

    一. 格式化输出现在有以下需求,让用户输入name, age, job,hobby 然后输出如下所示: -----------info of Alex Li----------- Name : Ale ...

  2. 虚拟机centos 同一个tomcat、不同端口访问不同的项目

    在tomcat中复制webapps目录,并重命名:

  3. restful的认识和用法

    目录 一.restful的认识 1.基本概念 2.规范和约束 3.使用标准的状态码 二.具体使用 1.简单概括 2.根据id查询一个员工 3.查询所有员工 4.保存一个员工 5.根据id修改员工 6. ...

  4. 【bootstrap】使用支持bootstrap的时间插件daterangepicker

    其中的架包和代码,具体可以去GitHub下查看: https://github.com/AngelSXD/myagenorderdiscount 1.引入js和css <link href=&q ...

  5. 为什么硬盘明明还有空间,linux却说硬盘空间不足?inode;mkdir: 无法创建目录"shen1": 设备上没有空间

    现象:df -h显示硬盘还有14G空间,但是touch file/mkdir directory都失败,提示硬盘没有空间 原因:df -ia查看下inode的使用情况,发现已经爆了,(下图显示使用88 ...

  6. JFinal学习 & Gradle配置续 & Tomcat配置

    接上一篇对Gradle的学习,再用JFinal项目再建一个. 参考了这篇文章:https://my.oschina.net/u/1010578/blog/390094 但是其中没有代码,所以看了这篇  ...

  7. 【转载】使用事件模型 & libev学习

    参考这篇文章: http://www.ibm.com/developerworks/cn/linux/l-cn-edntwk/ 这里面使用的是 libev ,不是libevent Nodejs就是采用 ...

  8. repeated-substring-pattern

    https://leetcode.com/problems/repeated-substring-pattern/ 下面这个方法,开始我觉得挺好.可惜还是超时了.后来我就加了一个剪枝策略,只有长度能够 ...

  9. phonegap工程中修改app的名字

    针对phonegap比较高的版本,我的是6.4.0. 在phonegap工程中,当添加了iOS和android平台或多个平台后,工程进行了开发,然后觉得app的名字想修改一下(比如在手机上显示的app ...

  10. vu 是什么

    unsigned char 是无符号字符型 volatile      易变,易失的 volatile  unsigned char i; 意思是定义一个无符号字符型的变量 i. 这个变量存放在内存中 ...