peakzhang 发表于 2008-1-7 20:53:20

ACE不自动初始化Winsock ?



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

这段代码执行以后返回的是
(2696|292) b: WSA Startup not initialized

peakzhang 发表于 2008-1-7 20:53:27

在程序的开始加入ACE::init();

在程序的结束加入ACE::fini();

或把int main(int argc, char *argv[]) 替换为 int ACE_TMAIN(int argc, ACE_TCHAR *argv[]).
页: [1]
查看完整版本: ACE不自动初始化Winsock ?