Ace(二)Demo示例

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;
}

  

时间: 2024-10-30 07:39:18

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

Ext简单demo示例

1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 5 <titl

Python登录模块Demo示例

Python登录模块Demo示例: #!/usr/bin/env python # This content comes from alex. while True:     NAME = raw_input("Please input your name:\n")     if NAME == 'alex':         P = '123'         PASSWD = raw_input("Please input your password:\n")

前端学习-10个demo示例学会CSS3 radial-gradient径向渐变

一.语法细节记不住怎么办?实际开发的时候,当要使用radial-gradient径向渐变的时候,脑中会有大概的语法,但是细节却记不住,于是想快捷找个案例看看具体怎么用,然后直接套一下.通常一番搜索,会发现虽然是个简单需求,但是正好满足这个需求的页面却不好找,乱糟糟的. 下次遇到这种场景,直接来本站搜"径向渐变",或者直接搜索"渐变",就有专门展示radial-gradient径向渐变基本语法使用案例的文章.文章共展示了10例常见使用案例,相信一定可以覆盖你的使用场景

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

扫码支付 本文附有代码,在下方,如果不熟悉场景的可以看看下面的场景介绍 场景介绍 官网介绍地址:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_1 用户扫描商户展示在各种场景的二维码进行支付. 步骤1:商户根据微信支付的规则,为不同商品生成不同的二维码(如图6.1),展示在各种场景,用于用户扫描购买. 步骤2:用户使用微信"扫一扫"(如图6.2)扫描二维码后,获取商品支付信息,引导用户完成支付(如图6.3). 图6

dubbo开发环境搭建与tomcat集成、DEMO示例(最完整版本、带管理控制台、监控中心、zookeeper)

以windows为例,linux基本相同,开发环境一般linux,个人环境一般windows(如果不开额外vm的话). 示例以dubbo官方自带demo为例子,进行整合和稍加修改测试. 0.dubbox是dubbo的当当fork版本,特性上最主要是集成了REST.就核心功能而言,dubbo和大部分其他rpc框架比如spring cloud类似,由客户端.服务端.服务注册与发现中心.监控中心以及管理中心组成.如下: 1.安装zookeeper,从https://zookeeper.apache.o

BCGSoft Demo示例展示:网格示例

BCGSoft公司的BCGControlBar产品是全球最优秀的MFC界面类库,功能强大,显示丰富,在国际上享有盛誉,并屡次获奖,是VC界面设计的必备首选! 本文中的示例主要演示了各种网格控件功能的使用. 您也可以下载BCGControlBar专业版免费试用体验哦! BCGPGridExample 本示例演示了网格控件的各种模式: 基本网格 报表控件 虚拟列表 其他与网格控件相关的功能: 各种单元格类型 自定义具有不同颜色主题的网格颜色 "合并单元格"功能 | 下载Demo BCGPD

BCGSoft Demo示例展示:工具栏示例集合(1/2)

BCGSoft公司的BCGControlBar产品是全球最优秀的MFC界面类库,功能强大,显示丰富,在国际上享有盛誉,并屡次获奖,是VC界面设计的必备首选!本文主要介绍了工具栏的各种示例及其相关功能. 您也可以下载BCGControlBar专业版免费试用体验哦! PaletteDemo 本示例演示了如何创建一个具有自绘信息区的多列工具栏.可以通过编程的方式改变列数,该工具栏可以只对接在左侧或主框架窗口右边缘. | 下载Demo Slider 本示例演示了如何将一个自定义(外部)控件放置在工具栏上

BCGSoft Demo示例展示之一般示例集合(1/2)

BCGSoft公司的BCGControlBar产品是全球最优秀的MFC界面类库,功能强大,显示丰富,在国际上享有盛誉,并屡次获奖,是VC界面设计的必备首选! 本文中的这些示例程序主要演示了如何创建先进的图形用户界面. 您也可以下载BCGControlBar专业版免费试用体验哦! BCGPVisualStudioGUIDemo 本示例演示了如何创建一个模拟Visual Studio IDE的应用程序.具体表现在: 自定义工具栏和菜单 标准的对接控件栏(Visual Studio.NET 2003-

BCGSoft Demo示例展示:工具栏示例集合(2/2)

BCGSoft公司的BCGControlBar产品是全球最优秀的MFC界面类库,功能强大,显示丰富,在国际上享有盛誉,并屡次获奖,是VC界面设计的必备首选! 本文主要介绍了工具栏的各种示例及其相关功能. 您也可以下载BCGControlBar专业版免费试用体验哦! ToolbarEditBox 本示例主要演示了如何将编辑框和具有spin控件的编辑器放置到工具栏上. | 下载Demo ToolbarImages 本示例主要演示了如何使用CBCGPToolbarImages类,同时您还能看到如何创建