小明思考

高性能服务器端计算
posts - 70, comments - 428, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

ACE 示例1 --- Time Server

Posted on 2006-02-16 17:48 小明 阅读(3544) 评论(4)  编辑 收藏 引用 所属分类: Network/ACE
这个系列,我将把我学ACE写的一些小程序,放上来跟大家share.

所谓Time Server,很简单,就是用户连上来的时候,返回系统时间。这可能是最简单的server端程序了。

代码:

#ifdef _DEBUG
#pragma comment(lib,
"ACED.lib")
#else
#pragma comment(lib,
"ACE.lib")
#endif

#include 
<ace/OS_main.h>
#include 
<ace/ACE.h>
#include 
<ace/Log_Msg.h>
#include 
<ace/SOCK_Acceptor.h>
#include 
<ctime>

int main(int argc, char *argv[])
{
    ACE_INET_Addr addr(
1500);
    ACE_SOCK_Acceptor server;
    ACE_SOCK_Stream stream;

    
if(server.open(addr)==-1)
    {
        ACE_DEBUG ((LM_DEBUG,
            ACE_TEXT (
"(%P|%t) %p\n"),
            ACE_TEXT (
"bind failed")));
        
return 1;
    }

    
char msg[15];

    
while(server.accept(stream)!=-1)
    {
        ACE_INET_Addr raddr;
        stream.get_remote_addr(raddr);
        ACE_DEBUG ((LM_DEBUG,ACE_TEXT (
"(%P|%t) connect:%s %d\n"),raddr.get_host_addr(),raddr.get_port_number()));

        
//get current time
        time_t nTime=0;
        time( 
&nTime ) ;
        tm 
*tm1 = localtime( &nTime ) ;
        sprintf(msg,
"%04d%02d%02d%02d%02d%02d",tm1->tm_year+1900,tm1->tm_mon+1,tm1->tm_mday,tm1->tm_hour,tm1->tm_min,tm1->tm_sec);

        stream.send_n(msg,
sizeof(msg));
        stream.close();
    }

    server.close();

    
return 0;
}


简单的说明一下:

ACE_INET_Addr相当于socket中的sockaddr_in的封装.

ACE_SOCK_Acceptor是服务器端socket操作的封装,相对于客户端的ACE_SOCK_Connector

ACE_SOCK_Stream是对Socket数据的封装,可以把它想象成一个在网络上的数据流。发送数据,接收数据就靠它了。

ACE_DEBUG是ACE提供的Debug机制,会打印信息到控制台

这个程序使用的是单线程,简单的返回时间,然后关闭连接,这对于Time Server是足够的。

至于客户端程序的写法,参见我以前写的: http://www.cppblog.com/sandy/archive/2005/11/24/1281.html

Feedback

# 头文件  回复  更多评论   

2006-02-17 16:11 by 晓晓
这几个头文件,自动生成,还是引用的
#include <ace/OS_main.h>
#include <ace/ACE.h>
#include <ace/Log_Msg.h>
#include <ace/SOCK_Acceptor.h>

# re: 晓晓  回复  更多评论   

2006-02-17 16:14 by 小明
什么叫自动生成的?当然是自己手动写的阿。

# re: ACE 示例1 --- Time Server  回复  更多评论   

2007-12-26 16:32 by 南龙
正在学习 ACE ,真不知道如何入门,这里不错,以后多多请教!

# re: ACE 示例1 --- Time Server  回复  更多评论   

2009-08-01 16:23 by Harris Dai
一起学ACE的吗?
QQ:546298089
MSN:softdevdhx@gmail.com

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理