ACE学习笔记

 ACE的SOCKET包装类

ACE_SOCK_Connector      #include "ace/SOCK_Connector.h"     连接

 

ACE_SOCK_Acceptor       #include "ace/SOCK_Acceptor.h"  用于监听

                                                   

ACE_SOCK_Stream        #include "ace/SOCK_Stream.h"       有发送和接受功能

1.iovec response;

peer.recvv(&response);//peer为Stream,可以接收iovec 数组数据,防止泄漏

 

ACE_INET_Addr           #include "ace/INET_Addr.h"             等价于TCP的sockaddr_in

 

ACE_Time_Value     #include "ace/Time_Value.h"  尝试连接时间 ,可用于 Connector , Stream       

 1.eg:ACE_Time_Value timeout(10);

status.send_n("uptime/n",7,&timeout);//status可以为Connector , Stream       

 

一个ACE的客户端简单例子:

#include <iostream>
#include <conio.h>
#include "ace/INET_Addr.h"
#include "ace/SOCK_Stream.h"
#include "ace/SOCK_Connector.h"
#include "ace/Log_Msg.h"
using namespace std;
int main(int ,char *[])
{
 ACE_INET_Addr srvr(50000,ACE_LOCALHOST);
 ACE_SOCK_Connector connector;
 ACE_SOCK_Stream peer;
 if(connector.connect(peer,srvr)==-1)
 {
  cout<<"are't connect"<<endl;
  getch();
  ACE_ERROR_RETURN((LM_ERROR,ACE_TEXT("%p/n"),ACE_TEXT("connect")),1);
  
 }
 int bc;
 char buf[64];
 peer.send_n("uptime/n",7);
 bc=peer.recv(buf,sizeof(buf));
 write(1,buf,bc);
 peer.close();
 getch();
 return 0;
}

 

一个ACE服务端例子

#include <iostream>
#include <conio.h>
#include "ace/INET_Addr.h"
#include "ace/SOCK_Stream.h"
#include "ace/SOCK_Acceptor.h" 
#include "ace/Time_Value.h"
#include "ace/Log_Msg.h"
using namespace std;
int main(int ,char *[])
{
 ACE_INET_Addr port_to_listen(50000,ACE_LOCALHOST);
 ACE_SOCK_Acceptor acceptor;

 if(acceptor.open(port_to_listen,1)==-1)
 {
  ACE_ERROR_RETURN((LM_ERROR,ACE_TEXT("%p/n"),ACE_TEXT("acceptor.open")),1);
 }
 while(1)
 {
  ACE_SOCK_Stream peer;
  ACE_INET_Addr peer_addr;
  ACE_Time_Value timeout(10,0);

  if(acceptor.accept(peer)==-1)
  {
   ACE_ERROR_RETURN((LM_ERROR,ACE_TEXT("%p/n"),ACE_TEXT("connect")),1);
  }
  /*if(acceptor.accept(peer,&peer_addr,&timeout,0)==-1)
  {
   if(ACE_OS::last_error()==EINTR)
    ACE_DEBUG((LM_DEBUG,ACE_TEXT("(%P|%t) interrupted while waiting for connection/n")));
   if(ACE_OS::last_error()==ETIMEDOUT)
    ACE_DEBUG((LM_DEBUG,ACE_TEXT("(%P|%t) timeout while waiting for connection/n")));
  }*/
  else
  {
   ACE_TCHAR peer_name[4096];
   peer_addr.addr_to_string(peer_name,4096);
   cout<<peer_name<<" connection"<<endl;
   char buffer[4096];
   ssize_t bytes_received;
   while((bytes_received=peer.recv(buffer,sizeof(buffer)))!=-1)
   {
    peer.send_n(buffer,bytes_received);
   }
   peer.close();
  }

 }
 return 0;
}

 

 

获取错误时可以用ACE_OS::last_error(),也可以用GetLastError(),不过是为了方便移植

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值