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/IP UDP/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_name buff: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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值