Focus on ACE
订阅 ace-china
电子邮件:
浏览存于
groups.google.com
上的
所有帖子
C++博客
首页
新随笔
联系
聚合
管理
64 Posts :: 3 Stories :: 22 Comments :: 0 Trackbacks
公告
欢迎大家跟我交流
gTalk: 2005119@gmail.com
我的统计
您是第
位访客
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(1)
给我留言
查看公开留言
查看私人留言
随笔分类
(74)
ACE(28)
C++&OOP(19)
Miscellaneous(23)
TAO(4)
随笔档案
(64)
2012年7月 (1)
2009年9月 (1)
2008年7月 (1)
2007年12月 (1)
2007年1月 (1)
2006年12月 (1)
2006年8月 (5)
2006年7月 (5)
2006年6月 (10)
2006年5月 (8)
2006年4月 (29)
2006年3月 (1)
文章档案
(3)
2006年5月 (1)
2006年4月 (2)
收藏夹
(4)
ACE Favorites (3)
Favorites (1)
ACE论坛
ACE Usergroups
ACE中文用户组
Huihoo ACE/TAO论坛区
网上邻居
Carrey的Blog
Huyi的Blog
Lsmodel的Blog
阿彪的Blog
编辑空间
豆豆爹的Blog
天下奇毒的Blog
我的另一个blog
小明的Blog
最新随笔
1. 欢迎访问我的新网站
2. 优先级反转
3. 如何在Windows,Visual C++下获取、配置和构建ACE及TAO?
4. 欢迎访问www.ace-tao.org/bbs
5. 使用vs2005(vc8)编译log4cpp-0.3.5rc3
6. TAO(The ACE ORB)简介
7. ACE小技巧:在ACE_Acceptor框架中,自定义服务处理器的创建
8. 小技巧: 当ACE_Svc_Handler关闭时使用的默认行为
9. 小技巧: ACE_Svc_Handler的初始化
10. 有人知道CSDN邮件列表的退订方式吗?
搜索
积分与排名
积分 - 135441
排名 - 188
最新随笔
1. 欢迎访问我的新网站
2. 优先级反转
3. 如何在Windows,Visual C++下获取、配置和构建ACE及TAO?
4. 欢迎访问www.ace-tao.org/bbs
5. 使用vs2005(vc8)编译log4cpp-0.3.5rc3
6. TAO(The ACE ORB)简介
7. ACE小技巧:在ACE_Acceptor框架中,自定义服务处理器的创建
8. 小技巧: 当ACE_Svc_Handler关闭时使用的默认行为
9. 小技巧: ACE_Svc_Handler的初始化
10. 有人知道CSDN邮件列表的退订方式吗?
最新评论
1. re: 再次获得互斥体,为什么没有死锁
@slay78
II楼 正解,linux 上不想死锁,可以用ACE_Recursive_Thread_Mutex
--hai
2. re: ACE电子书下载
看了书就下载了,怎么不提供密码啊
--peace
3. re: ACE电子书下载[未登录]
解压要密码!!!!!!!
--小明
4. re: C++编码不规范出现的错误一例的解析
sec<0 || sec>59
是不对的.应该是
sec<0 || sec>60
--mymtom
5. re: 有人知道CSDN邮件列表的退订方式吗?
直接过滤掉,Gmail就有这个功能
--HelloWorld
阅读排行榜
1. socket编程:SO_REUSEADDR例解 (转)(24346)
2. 在Visual Studio 2005下使用CPPUnit向导(5188)
3. 使用vs2005(vc8)编译log4cpp-0.3.5rc3(4196)
4. TAO(The ACE ORB)简介(4016)
5. 小技巧: ACE_Svc_Handler的初始化(3801)
评论排行榜
1. 今天喜得两本书,需要的请留言(5)
2. 将ACE事件循环与MFC UI集成的一种实现(3)
3. 再次获得互斥体,为什么没有死锁(3)
4. 巧用虚友元函数(原创)(3)
5. ACE电子书下载(2)
ACE_Reactor Server一例,刊误修正版
#ifdef _DEBUG
#pragma comment (lib,
"
aced.lib
"
)
#else
#pragma comment (lib,
"
ace
.lib
"
)
#endif
#include
"
ace
/Reactor.h
"
#include
"
ace
/SOCK_Acceptor.h
"
#define
PORT_NO 19998
typedef ACE_SOCK_Acceptor Acceptor;
//
forward declaration
class
My_Accept_Handler;
class
My_Input_Handler:
public
ACE_Event_Handler
{
public
:
//
construcor
My_Input_Handler()
{
ACE_DEBUG((LM_DEBUG,
"
Constructor\n
"
));
}
//
Called back to handle any input received
int
handle_input(ACE_HANDLE)
{
//
receive the data
peer().recv_n(data,
12
);
ACE_DEBUG((LM_DEBUG,
"
%s\n
"
,data));
//
do something with the input received.
//
//
keep yourself registerd with the reator
return
0
;
}
//
Used by the reactor to determine the underlying handle
ACE_HANDLE get_handle()
const
{
return
this
->
peer_.get_handle();
}
//
Returns a reference to the underlying stream.
ACE_SOCK_Stream
&
peer()
{
return
this
->
peer_;
}
private
:
ACE_SOCK_Stream peer_;
char
data [
12
];
}
;
class
My_Accept_Handler:
public
ACE_Event_Handler
{
public
:
//
Constructor
My_Accept_Handler(ACE_Addr
&
addr)
{
this
->
open(addr);
}
//
Open the peer_acceptor so it starts to "listen"
//
for incoming clients
int
open(ACE_Addr
&
addr)
{
peer_acceptor.open(addr);
return
0
;
}
//
Overload the handle input method
int
handle_input(ACE_HANDLE handle)
{
//
Client has requested connection to server.
//
Create a handler to handle the connection
My_Input_Handler
*
eh
=
new
My_Input_Handler();
//
Accept the connection "into" the Event Handler
if
(
this
->
peer_acceptor.accept(eh
->
peer(),
//
stream
0
,
//
remote address
0
,
//
timeout
1
)
==
-
1
)
//
restart if interrupted
ACE_DEBUG((LM_ERROR,
"
Error in connection \n
"
));
ACE_DEBUG((LM_DEBUG,
"
Connection established\n
"
));
//
Register the input event handler for reading
ACE_Reactor::instance()
->
register_handler(eh,ACE_Event_Handler::READ_MASK);
//
Unregister as the acceptor is not expecting new clients
return
-
1
;
}
//
Used by the reactor to determine the underlying handle
ACE_HANDLE get_handle(
void
)
const
{
return
this
->
peer_acceptor.get_handle();
}
private
:
Acceptor peer_acceptor;
}
;
int
ACE_TMAIN(
int
argc,
char
*
argv[])
{
//
Create an address on which to receive connections
ACE_INET_Addr addr(PORT_NO);
//
Create the Accept Handler which automatically begins to "listen"
//
for client requests for connections
My_Accept_Handler
*
eh
=
new
My_Accept_Handler(addr);
//
Register the reator to call back when incoming client connects
ACE_Reactor::instance()
->
register_handler(eh,ACE_Event_Handler::ACCEPT_MASK);
//
Start the event loop
while
(
1
)
ACE_Reactor::instance()
->
handle_events();
}
书的几个印刷错误,修改后放在上面
测试说明
运行程序后,在19998端口等待客户的连接
建立连接后,收到12个字符号,回显示在屏幕上
telnet 127.0.0.1 19998
通过控制台输入字符,查看对端显示
posted on 2006-04-12 17:28
Stone Jiang
阅读(666)
评论(0)
编辑
收藏
引用
所属分类:
ACE
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
ACE小技巧:在ACE_Acceptor框架中,自定义服务处理器的创建
小技巧: 当ACE_Svc_Handler关闭时使用的默认行为
小技巧: ACE_Svc_Handler的初始化
ACE_Hash_Map的使用示例
关于ACE_Thread_Mutex的回复
再次获得互斥体,为什么没有死锁
ACE应用程序链接错误 error LNK2019 的解决办法
Visual C++下ACE动态服务配置入门
关于ACE_Task::last_thread()
在Linux下安装ACE菜鸟指南
网站导航:
博客园
IT新闻
BlogJava
博问
Chat2DB
管理
Powered by:
C++博客
Copyright © Stone Jiang