作者:小明 来源:C++博客   酷勤网收集 2007-11-13

摘要
  所谓Time Server,很简单,就是用户连上来的时候,返回系统时间。这可能是最简单的server端程序了。
这个系列,我将把我学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/2006/02/16/3293.html

分类: C++名库 编程语言

上一篇:ACE Beginner   下一篇:ACE 示例2 --- Echo Server


关于酷勤 | 联系方式 | 免责声明 | 友情链接