C++ POCO库中文编程

操作方法

  • 01

    C++ POCO库中文编程 1 What is POCO? POCO 是什么?这是我最常被人问到的。POCO 是 POrtable COmponents 的缩写,官方主页:POCOProject.org。是一个十分超卓的 C++ 库,相当于 Java 的 Class Library、.NET 的 Framework 和 Apple 的 Cocoa。它与 Boost 是十分不一样的,简单说 Boost 即是相当于 Advanced STL。 2 本系列文章所运用的 POCO 版别 POCO C++ Library 1.4.3p1 (2012-01-23)3 库逻辑布局 下图摘自 POCO 官网。OS API 是运用操作系统层的,C++/C Standard Libararies 是规范库,其他的模块都是 POCO 所供给的,包含:Foundation、XML、Crypto、XML、Util、Net、Zip、NetSSL、Data(撑持 SQLite、ODBC、MySQL)、Tools & Utilities、Application。 4 撑持渠道 Desktop/Server: - Windows - Linux - Mac OS X - Solaris - HP-UX - AIX Embedded: - Windows Embedded CE - Embedded Linux (uClibc or glibc) - iOS - QNX - VxWorks - Android 5 Namespaces Poco Poco::Crypto Poco::Data Poco::Data::MySQL Poco::Data::ODBC Poco::Data::SQLite Poco::Net Poco::Util Poco::Util::Units Poco::Util::Units::Constants Poco::Util::Units::Internal Poco::Util::Units::Values Poco::XML Poco::Zip C++ POCO库中文编程参阅攻略(2) 根本数据类型(Poco/Types.h)根本类型在Poco/Types.h头文件中。以下以 GNU C/C++ 和 CLang 为例。不 过要着重的是,POCO 有极好的跨渠道性,你能想到的渠道,简直都能够运转 POCO。 1 有符号整型 typedef signed char            Int8; typedef signed short           Int16; typedef signed int             Int32; 2 无符号整型 typedef unsigned char          UInt8; typedef unsigned short         UInt16; typedef unsigned int           UInt32; 3 Pointer or Handler typedef signed long            IntPtr; typedef unsigned long          UIntPtr; 4 64 位整型 思考了 32 位机和 64 位机的状况 #if defined(__LP64__)      #define POCO_PTR_IS_64_BIT 1      #define POCO_LONG_IS_64_BIT 1      typedef signed long        Int64;      typedef unsigned long      UInt64;  #else      typedef signed long long   Int64;      typedef unsigned long long UInt64;  #endif  #define POCO_HAVE_INT64 1 C++ POCO库中文编程参阅攻略(3) Poco::Net::Socket1 SelectMode enum SelectMode      /// The mode argument to poll() and select().  {      SELECT_READ  = 1,      SELECT_WRITE = 2,      SELECT_ERROR = 4  };2 SocketList typedef std::vectorSocketList; 3 布局函数 未初始化的 socket: Socket (); 复制布局函数 Socket(const Socket& socket); 4 重载运算符 赋值运算符: Socket& operator = (const Socket& socket); 对比运算符: bool operator == (const Socket& socket) const;  bool operator != (const Socket& socket) const;  bool operator <  (const Socket& socket) const;  bool operator <= (const Socket& socket) const;  bool operator >  (const Socket& socket) const;  bool operator >= (const Socket& socket) const;5 常用 socket 操作 回来该 socket 的可读数据的字节数,该操作不导致 socket 堵塞: int available() const; 封闭 socket: void close(); poll: bool poll(const Poco::Timespan& timeout, int mode) const;      /// Determines the status of the socket, using a       /// call to select().      ///       /// The mode argument is constructed by combining the values      /// of the SelectMode enumeration.      ///      /// Returns true if the next operation corresponding to      /// mode will not block, false otherwise. SocketImpl* impl() const;      /// Returns the SocketImpl for this socket.查看这个 socket 的衔接是不是是安全的(运用 SSL 或 TLS): bool secure() const; 6 缓冲区 发送数据的缓冲区: void setSendBufferSize(int size); int getSendBufferSize() const; 接 收数据的缓冲区: void setReceiveBufferSize(int size); int getReceiveBufferSize() const; 7 超不时刻 发送数据的超不时 间: void setSendTimeout(const Poco::Timespan& timeout); Poco::Timespan getSendTimeout() const; 接纳数据的超 不时刻: void setReceiveTimeout(const Poco::Timespan& timeout); Poco::Timespan getReceiveTimeout() const; 8 其他接口 void setOption(int level, int option, int value);  void setOption(int level, int option, unsigned value);  void setOption(int level, int option, unsigned char value);  void setOption(int level, int option, const Poco::Timespan& value);  void setOption(int level, int option, const IPAddress& value); void getOption(int level, int option, int& value) const;  void getOption(int level, int option, unsigned& value) const;  void getOption(int level, int option, unsigned char& value) const; void getOption(int level, int option, Poco::Timespan& value) const;  void getOption(int level, int option, IPAddress& value) const; void setLinger(bool on, int seconds);  void getLinger(bool& on, int& seconds) const; void setNoDelay(bool flag);  bool getNoDelay() const; void setKeepAlive(bool flag);  bool getKeepAlive() const; void setReuseAddress(bool flag);  bool getReuseAddress() const; void setReusePort(bool flag);  bool getReusePort() const; void setOOBInline(bool flag);  bool getOOBInline() const; void setBlocking(bool flag);  bool getBlocking() const;获取 socket 的 IP 和端口: SocketAddress address() const; 获取 peer socket 的 IP 地 址和端口: SocketAddress peerAddress() const; 9 静态函数 select: static int select(SocketList& readList,                    SocketList& writeList,                     SocketList& exceptList,                     const Poco::Timespan& timeout); /// Determines the status of one or more sockets,       /// using a call to select().      ///      /// ReadList contains the list of sockets which should be      /// checked for readability.      ///      /// WriteList contains the list of sockets which should be      /// checked for writeability.      ///      /// ExceptList contains a list of sockets which should be      /// checked for a pending error.      ///      /// Returns the number of sockets ready.      ///      /// After return,       ///   * readList contains those sockets ready for reading,      ///   * writeList contains those sockets ready for writing,      ///   * exceptList contains those sockets with a pending error.      ///      /// If the total number of sockets passed in readList, writeList and      /// exceptList is zero, select() will return immediately and the      /// return value will be 0.      ///      /// If one of the sockets passed to select() is closed while      /// select() runs, select will return immediately. However,      /// the closed socket will not be included in any list.      /// In this case, the return value may be greater than the sum      /// of all sockets in all list.查看是不是撑持 IPv4 或 IPv6 : static bool supportsIPv4(); static bool supportsIPv6 (); C++ POCO库中文编程参阅攻略(4) Poco::Net::IPAddress1 Poco::Net::IPAddress 地址最大长度,IPv4 是 in_addr 的长度, IPv6 是 in6_addr 的长度 enum  {      MAX_ADDRESS_LENGTH =   #if defined(POCO_HAVE_IPv6)        sizeof(struct in6_addr)  #else        sizeof(struct in_addr)  #endif          /// Maximum length in bytes of a socket address.  };1.1 IPv4 or IPv6? POCO 用一个枚举类来表明: enum Family      /// Possible address families for IP addresses.  {      IPv4,      IPv6  };1.2 布局函数 回来一个全 0 的 IP 地址: IPAddress(); 复制布局函数: IPAddress(const IPAddress& addr); 依据 IP 类型(IPv4 或 IPv6)创立一个全 0 的 IP 地址: explicit IPAddress(Family family); 用字符串类 型的 IPv4 地址或 IPv6 地址来创立一个 IP 地址,其间 IPv4 是十进制表明的 ,IPv6 是十六进制表明的: explicit IPAddress(const std::string& addr); 用字符串类型的 IP 地址和指定的类型(IPv4 或 IPv6)创立一个 IP 地址,其间 IPv4 是十进制表明的,IPv6 是十六进制表 示的: IPAddress(const std::string& addr, Family family); 用原生 IP 地址 in_addr 或 in6_addr 数据布局和给定的字符 串长度,创立一个 IPAddress: IPAddress(const void* addr, poco_socklen_t length); 用原生 IP 地址 in_addr 或 in6_addr 数据 布局和给定的字符串长度,创立一个 IPAddress,其间 scope 参数用于 IPv6, IPv4 会疏忽这个参数: IPAddress(const void* addr, poco_socklen_t length, Poco::UInt32 scope); 1.3 重载运算符 赋值运算符: IPAddress& operator = (const IPAddress& addr); 比 较运算符 bool operator == (const IPAddress& addr) const;  bool operator != (const IPAddress& addr) const;  bool operator <  (const IPAddress& addr) const;  bool operator <= (const IPAddress& addr) const;  bool operator >  (const IPAddress& addr) const;  bool operator >= (const IPAddress& addr) const;1.4 常 用操作 swap: void swap(IPAddress& address); 获 取地址类型: Family family() const; IPv6 专用函数,回来 scope identifier,如果是 IPv4 则回来 0: Poco::UInt32 scope() const; toString,IPv4 则显现“d.d.d.d”,IPv6 则 std::string toString() const; poco_socklen_t length() const; const void* addr() const; int af() const; void mask(const IPAddress& mask); void mask(const IPAddress& mask, const IPAddress& set); static IPAddress parse(const std::string& addr); static bool tryParse(const std::string& addr, IPAddress& result); static IPAddress wildcard(Family family = IPv4); static IPAddress broadcast();1.5 IS 函数 1.5.1 是不是是未初始 化状况 是不是是未初始化的全零状况(wildcard): bool isWildcard() const; 1.5.2 是不是是播送/组播/单播 是不是是播送 地址(全零),与 wildcard 的区别是 wildcard 是未通过初始化的。只要 IPv4 有播送地址,IPv6 则回来 false。 bool isBroadcast() const; 是不是是回环地址: 关于 IPv4 是 127.0.0.1 关于 IPv6 是::1 函数原型: bool isLoopback() const; 是不是是多播: 关于 IPv4 是224.0.0.0到 239.255.255.255规模; 关于 IPv6 是FFxx:x:x:x:x:x:x:x的规模: 函数原型: bool isMulticast() const; 是不是是单播: bool isUnicast() const; 1.5.2 其他函数 bool isLinkLocal() const;  bool isSiteLocal() const;bool isIPv4Compatible() const;bool isIPv4Mapped() const;bool isWellKnownMC() const;bool isNodeLocalMC() const;  bool isLinkLocalMC() const;  bool isSiteLocalMC() const;bool isOrgLocalMC() const;bool isGlobalMC() const;1.5 protected 函数 protected: void init(IPAddressImpl* pImpl); C++ POCO库中文编程参阅攻略(5) Poco::Net::SocketAddress1 枚举 最大地址长度,这个与Poco::Net::IPAddress中的界说能够类 比,不过这里指的是`struct sockaddr_in6 enum  {      MAX_ADDRESS_LENGTH =   #if defined(POCO_HAVE_IPv6)          sizeof(struct sockaddr_in6)  #else          sizeof(struct sockaddr_in)  #endif          /// Maximum length in bytes of a socket address.  };2 布局函数 创立一个 wildcard 的全 0 的 IPv4 的 socket 地址: SocketAddress(); 用 Poco::Net::IPAddress 和端口号创 建 IPv4 或 IPv6 的 SocketAddress: SocketAddress(const IPAddress& host, Poco::UInt16 port); 用 std::string 和端口号 创立 IPv4 或 IPv6 的 SocketAddress: SocketAddress(const std::string& host, Poco::UInt16 port); SocketAddress(const std::string& host, const std::string& port); explicit SocketAddress(const std::string& hostAndPort); 复制布局函数 : SocketAddress(const SocketAddress& addr); 原生方法 布局 SocketAddress: SocketAddress(const struct sockaddr* addr, poco_socklen_t length); 3 常用函数 swap: void swap (SocketAddress& addr); 获取 IPAddress、端口和地址类型: IPAddress host() const; Poco::UInt16 port() const; IPAddress::Family family() const; 获取原生方法的地址长 度、地址和地址族: poco_socklen_t length() const; const struct sockaddr* addr() const; int af() const; toString: std::string toString() const; 4 重载运算符 bool operator == (const SocketAddress& addr) const; bool operator != (const SocketAddress& addr) const; 5 protected 函数 void init(const IPAddress& host, Poco::UInt16 port); void init(const std::string& host, Poco::UInt16 port); Poco::UInt16 resolveService(const std::string& service);

(0)

相关推荐

  • 程序员为什么不用中文来编程?

    程序员不一定都是学计算机专业出身, 低级的编程就像盖大楼砌砖的一样,不需要知道为什么,只要知道用什么就行了.但是各种语言如C语言.C#.C++.html.JavaScript.java.php和Del ...

  • 非计算机专业外行0基础如何学编程

    零基础的外行,很多因为喜欢编程,所以自己找资料来学编程.但很多人都说,编程很枯燥,参照着许多网上给出的,努力学习了三个月,到头来发现,自己只能写个黑框框 操作方法 01 在开始编程前,你要确定你为什么 ...

  • Sublime text之中文乱码超简单解决方案

    很多玩程序的小伙伴,刚开始使用Sublime Text神器软件时,都会遇到打开一个程序文件,里面的中文编程乱码,不知道怎么办,网上也有很多不同解决方案,这里小编跟大家分享一个超简单的办法 操作方法 0 ...

  • 怎么开发游戏辅助,给你指明学习流程

    外挂即通过欺骗或修改游戏以谋取利益的作弊程序.是指利用电脑技术针对一个或多个网络游戏,通过改变软件的部分程序制作而成的作弊程序. 操作方法 01 学习制作游戏辅助你首选必须懂一门编程语言,来制作游戏辅 ...

  • LINUX下的文件结构介绍

    /bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录的基点,比如用户user的主目录就是/home/use ...

  • 习语言是什么有什么用与C语言的关系?

    习语言是什么呢?习语言有什么用呢?许多童鞋都只听说过c语言却不知道习语言,下面小编带你一起来了解一下习语言是什么。 习语言是什么: 习语言即中文版的C语言,由一套完备的编程语法和相配套的工具组成,旨在 ...

  • 习语言是什么?

    习语言是什么: 习语言即中文版的C语言,由一套完备的编程语法和相配套的工具组成,旨在将计算机及软件编程大众化,普及化,中文化,提高程序的维护性而诞生。适合国人使用,尤其适合作为初学者的入门学习工具。 ...

  • 怎么制作游戏脚本

    相信很多朋友玩游戏都会想让电脑自己打,自己去干别的事情.买脚本吧不划算,有事功能也不全,最重要的是不安全.那么今天介绍二款软件让可以让大家自己制作游戏脚本. 操作方法 01 制作游戏脚本有很多软件,但 ...

  • 易语言怎样接入打码平台

    易语言作为一个可视化操作的中文编程软件,可以很更利的开发一些营销类的软件,能做自动化工作,这时对于有输入验证码的操作的,就要接入到打码平台了,现在看看易语言怎样接入到打码平台的! 操作方法 01 对于 ...