Posted on 2006-02-16 17:48
小明 閱讀(3606)
評論(4) 編輯 收藏 引用 所屬分類:
Network/ACE
這個系列,我將把我學ACE寫的一些小程序,放上來跟大家share.
所謂Time Server,很簡單,就是用戶連上來的時候,返回系統(tǒng)時間。這可能是最簡單的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數(shù)據(jù)的封裝,可以把它想象成一個在網絡上的數(shù)據(jù)流。發(fā)送數(shù)據(jù),接收數(shù)據(jù)就靠它了。
ACE_DEBUG是ACE提供的Debug機制,會打印信息到控制臺
這個程序使用的是單線程,簡單的返回時間,然后關閉連接,這對于Time Server是足夠的。
至于客戶端程序的寫法,參見我以前寫的: http://www.shnenglu.com/sandy/archive/2005/11/24/1281.html