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. HDU 6188最小费用流

    题目链接:http://hdu.hustoj.com/showproblem.php?pid=6118 掉坑里了,图很好建,Wa了一发,看了Disscuss里面有人提供了一组样例,画图发现:最小流模板 ...

  2. 洛谷——P1294 高手去散步

    P1294 高手去散步 题目背景 高手最近谈恋爱了.不过是单相思.“即使是单相思,也是完整的爱情”,高手从未放弃对它的追求.今天,这个阳光明媚的早晨,太阳从西边缓缓升起.于是它找到高手,希望在晨读开始 ...

  3. 着陆攻击LAND Attack

    着陆攻击LAND Attack   着陆攻击LAND Attack也是一种拒绝服务攻击DOS.LAND是Local Area Network Denial的缩写,意思是局域网拒绝服务攻击,翻译为着陆攻 ...

  4. 支持WEB、Android、IOS的地图解决方案

    转自原文 支持WEB.Android.IOS的地图解决方案 工具链 GIS工具集 OpenGeo Suite 包含PostGIS, GeoServer, GeoWebCache, OpenLayers ...

  5. linux查看 cpu及内存和硬盘使用情况的命令top

    使用时输入 top,退出时输入q http://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316399.html 简介 top命令是Linux下常用的 ...

  6. SilverLight:基础控件使用(6)-Slider控件

    ylbtech-SilverLight-Basic-Control:基础控件使用(6)-Slider控件 Slider 控件 Slider 控件的 ValueChanged 事件 1.A,返回顶部 S ...

  7. Dubbo zookeeper 初探

    先把zookeeper在本地给安装好, 安装方法参考:http://blog.csdn.net/wxwzy738/article/details/16330253 这里的话讲述了两个工程一个工程是提供 ...

  8. C# PropertyGrid控件应用心得 【转】

    源文 : http://blog.csdn.net/luyifeiniu/article/details/5426960 c#stringattributesobjectmicrosoftclass ...

  9. Git安装及SSH Key管理之Mac篇

    1.下载git客户端,下载地址为:https://git-scm.com/download/mac 2.打开安装包,可以看到此时的界面为:   我们需要把.pkg的安装包安装到系统当中.我双击了安装包 ...

  10. wdatepicker ie8等问题

    官方文档:http://www.my97.net/demo/resource/2.4.asp 以下内容为使用中遇到的问题,具体该插件具有的方法请自行查阅官方文档. 1.当触发wdatepicker事件 ...