ACE实例编程1

#include "ace/INET_Addr.h"

#include "ace/SOCK_Connector.h"

#include "ace/SOCK_Stream.h"

 

#include <iostream>

using namespace std;

 

int ACE_TMAIN (int argc, ACE_TCHAR* argv[])

 

{

  const char *pathname=argc>1 ? argv[1]:"index.html";

  const char *servername=argc>2 ? argv[2]:"ace.ece.uci.edu";

  ACE_SOCK_Connector connector;

  ACE_SOCK_Stream peer;

  ACE_INET_Addr peer_addr;

 

  if(peer_addr.set(80,servername)==-1)

  return -1;

  else

  if(connector.connect(peer,peer_addr)==-1)

  return -1;

 

  char buf[BUFSIZ];

  iovec iov[3];

  iov[0].iov_base="GET ";

  iov[0].iov_len=4;

  iov[1].iov_base=(char*)pathname;

  iov[1].iov_len=strlen(pathname);

  iov[2].iov_base="http/1.0/r/n/r/n";

  iov[2].iov_len=13;

 

  if(peer.sendv(iov,3)==-1)

  return -1;

  for(ssize_t n;(n=peer.recv(buf,sizeof buf))>0;)

  ACE::write_n(ACE_STDOUT,buf,n);

  system("pause");

  return peer.close()==-1?1:0;

}

 

简单了解ACE_SOCK_Connector  ACE_SOCK_Stream  ACE_INET_Addr 的用法

 

ACE_SOCK_Connector

用来主动建立一个新的通信端,提供的功能有:

1 发起一个到“对等接受者(peer acceptor)”的连接,并在建立后初始化一个ACE_SOCK_Stream对象;

2 连接可以通过“阻塞”,“非阻塞”或定时方式发起;

 

主要的方法:

conncet(stream:ACE_SOCK_Stream&,remote_addr:ACE_Addr&,timeout:ACE_Time_Value*=0)

通过“阻塞”,“非阻塞”或“定时”模式之一,主动连接某一网络地址上的ACE_SOCK_Stream

complete(stream:ACE_SOCK_Stream&,remote_addr:ACE_Addr*=0,timeout: ACE_Time_Value*=0)

结束一个“非阻塞”连接并初始化一个ACE_SOCK_Stream

注:ACE_SOCK_Connector默认情况下是“阻塞”通信的,如果要设“非阻塞”的可以把ACE_Time_Value::zero传递给它,设置“定时”的可以定义一个timeout参数给它,如ACE_Time_Value timeout(10),然后把&timeout传给ACE_SOCK_Connector

 

ACE_INET_Addr

继承于ACE_Addr(不进行介绍),用于表示TCP/IPUDP/IP的地址信息的,主要方法:

ACE_INET_Addr(port:unsigned short,host:const char*),set(port:unsigned short,host:const char*),

通过主机名,IP地址和(或)端口号初始化ACE_INET_Addr

string_to_add(address: const char*):int,将字符串转换成ACE_INET_Addr

add_to_string(s:char*,max:size_t,ipfmt:int=1):int,将ACE_INET_Addr转换为字符串

get_port_number()以“主机字节顺序”返回端口号

get_host_namebuff:char*,max:size_t:int返回主机名

 

ACE_SOCK_Stream:

封装了“数据模式”socket支持的数据传输机制

主要方法:

send(buf:void*,n:size_t,timeout:ACE_Time_Value*=0):int

recv(buf:void*,n:size_t,timeout:ACE_Time_Value*=0):int

两个函数用于发送和接收数据缓冲区数据。读,写的字节数可能比请求的字节数少,因为它们要受“os中的缓冲机制”和“传输协议中的流量控制”影响

 

send_n(buf:void *,len:size_t,timeout:ACE_Time_Value*=0,bytes_sentsize_t*=0):size_t

recv_n(buf:void *,len:size_t,timeout:ACE_Time_Value*=0,bytes_recvdsize_t*=0):size_t

这两个函数用于发送,接收恰好n个字节的缓冲区数据,简化“少量写入”和“少量读取”时的应用程序处理

 

 

sendv_n(v:iovec[],cnt:size_t,timeout:ACE_Time_Value*=0,bytes_sent:size_t*=0)

使用OS的“集中写入”系统函数,高效,完整地读取多个缓冲区数据

recvv_n(v:iovec[],cnt:size_t,timeout:ACE_Time_Value*=0,bytes_recvd:size_t*=0)

使用OS的“分散读取”系统函数,高效,完整地接收多个缓冲区数据

 

enable(ACE_NONBLOCK)/disable(ACE_NONBLOCK)方法继承于ACE_IPC_SAP类,用于设置ACE_SOCK_Stream类的“非阻塞”和“阻塞”模式

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值