ACE学习手记----ACE_INET_Addr类

ACE_INET_Addr是ACE网络框架中的关键辅助类,封装了C Socket的地址对象。理解其构造方法和成员函数,尤其是主机字节序和网络字节序的处理,对于ACE网络应用的开发至关重要。在设置地址和端口时,需注意字节序转换,可以使用set、set_port_number和set_address等函数。相等性比较时,可以使用==运算符或is_ip_equal成员函数,根据是否考虑端口进行判断。
摘要由CSDN通过智能技术生成

ACE_INET_Addr类,在这个ACE_网络框架中,应该是比较重要的辅助类,该类主要封装了C SOCKET 的地址对象,通过外观封装的模式,把struct sockaddr_in封装在内。方便用户的操作。 

 

因此个人认为掌握此类的常用构造方法和常用的成员函数,并深刻的理解,对于后续的学习ACE或者开发ACE网络应用程序应该会起到很大的帮助。工欲用其器、必先利其器。就先让我们把ACE_INET_Addr对象深刻的牢记在心中吧。

  1. /* -*- C++ -*- */
  2. //=============================================================================
  3. /**
  4.  *  @file    INET_Addr.h
  5.  *
  6.  *  $Id: INET_Addr.h 78617 2007-06-27 20:40:19Z mesnier_p $
  7.  *
  8.  *  @author Douglas C. Schmidt <schmidt@cs.wustl.edu>
  9.  */
  10. //=============================================================================
  11. #ifndef ACE_INET_ADDR_H
  12. #define ACE_INET_ADDR_H
  13. #include /**/ "ace/pre.h"
  14. #include "ace/Sock_Connect.h"
  15. #if !defined (ACE_LACKS_PRAGMA_ONCE)
  16. # pragma once
  17. #endif /* ACE_LACKS_PRAGMA_ONCE */
  18. #include "ace/Addr.h"
  19. #if defined(ACE_VXWORKS)
  20.    // Needed to get INET_ADDR_LEN
  21. #  include /**/ "inetLib.h"
  22. #endif /* ACE_VXWORKS */
  23. ACE_BEGIN_VERSIONED_NAMESPACE_DECL
  24. /**
  25.  * @class ACE_INET_Addr
  26.  *
  27.  * @brief Defines a C++ wrapper facade for the Internet domain address
  28.  * family format.
  29.  */
  30. class ACE_Export ACE_INET_Addr : public ACE_Addr
  31. {
  32. public:
  33.   // = Initialization methods.
  34.   /// Default constructor.
  35.   /// 默认构造函数
  36.   ACE_INET_Addr (void);
  37.   /// Copy constructor.
  38.   /// 拷贝构造函数
  39.   ACE_INET_Addr (const ACE_INET_Addr &);
  40.   /// Creates an ACE_INET_Addr from a sockaddr_in structure.
  41.   /// 使用参数@addr 地址初始化ACE_INET_Addr对象。
  42.   /// 参数@len 为 @addr结构地址对象的长度,使用 sizeof(strcut sockaddr_in)
  43.   ACE_INET_Addr (const sockaddr_in *addr, int len);
  44.   /// Creates an ACE_INET_Addr from a <port_number> and the remote
  45.   /// <host_name>. The port number is assumed to be in host byte order.
  46.   /// To set a port already in network byte order, please @see set().
  47.   /// Use address_family to select IPv6 (PF_INET6) vs. IPv4 (PF_INET).
  48.   /// 使用参数 @port_number 和 host_name 构造一个ACE_INET_Addr对象。
  49.   /// @port_number应该为主机字节序,构造函数需要把它转换了网络字节序。
  50.   /// 如果port_number为网络字节序,请使用 set成员函数或者set_port_number成员函数。
  51.   /// @address_family 用于指定ACE_INET_Addr的地址类型PF_INET(IPv4)或者PF_INET6(IPv6)
  52.   ACE_INET_Addr (u_short port_number,
  53.                  const char host_name[],
  54.                  int address_family = AF_UNSPEC);
  55.   /**
  56.    * Initializes an ACE_INET_Addr from the <address>, which can be
  57.    * "ip-number:port-number" (e.g., "tango.cs.wustl.edu:1234" or
  58.    * "128.252.166.57:1234").  If there is no ':' in the <address> it
  59.    * is assumed to be a port number, with the IP address being
  60.    * INADDR_ANY.
  61.    * 使用参数@address初始化一个ACE_INET_Addr对象。
  62.    * address的格式为 ip-number:port-number 或者 port-number.
  63.    * ip-number 可以为点分号的IP地址,也可是是域名地址。
  64.    * 如果参数@address没有提供 ip-number,只提供port-number时,地址被初始化为INADDR_ANY
  65.    * port-number 为主机字节序。
  66.    */
  67.   explicit ACE_INET_Addr (const char address[],
  68.                           int address_family = AF_UNSPEC);
  69.   /**
  70.    * Creates an ACE_INET_Addr from a <port_number> and an Internet
  71.    * <ip_addr>.  This method assumes that <port_number> and <ip_addr>
  72.    * are in host byte order. If you have addressing information in
  73.    * network byte order, @see set().
  74.    * 使用主机字节序的@port_number 和 @ip_addr初始化一个ACE_INET_Addr对象。
  75.    * 如port_number或者 ip
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值