C++POCO库中文编程.docx

上传人:b****3 文档编号:5355669 上传时间:2022-12-15 格式:DOCX 页数:11 大小:18.57KB
下载 相关 举报
C++POCO库中文编程.docx_第1页
第1页 / 共11页
C++POCO库中文编程.docx_第2页
第2页 / 共11页
C++POCO库中文编程.docx_第3页
第3页 / 共11页
C++POCO库中文编程.docx_第4页
第4页 / 共11页
C++POCO库中文编程.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

C++POCO库中文编程.docx

《C++POCO库中文编程.docx》由会员分享,可在线阅读,更多相关《C++POCO库中文编程.docx(11页珍藏版)》请在冰豆网上搜索。

C++POCO库中文编程.docx

C++POCO库中文编程

C++POCO库中文编程

1WhatisPOCO?

POCO是什么?

这是我最常被人问到的。

POCO是POrtableCOmponents的缩写,官方主页:

POCOProject.org。

是一个十分超卓的C++库,相当于Java的ClassLibrary、.NET的Framework和Apple的Cocoa。

它与Boost是十分不一样的,简单说Boost即是相当于AdvancedSTL。

2本系列文章所运用的POCO版别

POCOC++Library1.4.3p1(2012-01-23)3库逻辑布局

下图摘自POCO官网。

OSAPI是运用操作系统层的,C++/CStandardLibararies是规范库,其他的模块都是POCO所供给的,包含:

Foundation、XML、Crypto、XML、Util、Net、Zip、NetSSL、Data(撑持SQLite、ODBC、MySQL)、Tools&Utilities、Application。

4撑持渠道

Desktop/Server:

-Windows-Linux-MacOSX-Solaris-HP-UX-AIX

Embedded:

-WindowsEmbeddedCE-EmbeddedLinux(uClibcorglibc)-iOS-QNX-VxWorks-Android

5Namespaces

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头文件中。

以下以GNUC/C++和CLang为例。

不过要着重的是,POCO有极好的跨渠道性,你能想到的渠道,简直都能够运转POCO。

1有符号整型

typedefsignedcharInt8;

typedefsignedshortInt16;

typedefsignedintInt32;

2无符号整型

typedefunsignedcharUInt8;

typedefunsignedshortUInt16;

typedefunsignedintUInt32;

3PointerorHandler

typedefsignedlongIntPtr;

typedefunsignedlongUIntPtr;

464位整型

思考了32位机和64位机的状况

#ifdefined(__LP64__)

#definePOCO_PTR_IS_64_BIT1

#definePOCO_LONG_IS_64_BIT1

typedefsignedlongInt64;

typedefunsignedlongUInt64;

#else

typedefsignedlonglongInt64;

typedefunsignedlonglongUInt64;

#endif

#definePOCO_HAVE_INT641

C++POCO库中文编程参阅攻略(3)Poco:

:

Net:

:

Socket

1SelectMode

enumSelectMode

///Themodeargumenttopoll()andselect().

{

SELECT_READ=1,

SELECT_WRITE=2,

SELECT_ERROR=4

};2SocketList

typedefstd:

:

vectorSocketList;

3布局函数

未初始化的socket:

Socket();

复制布局函数

Socket(constSocket&socket);

4重载运算符

赋值运算符:

Socket&operator=(constSocket&socket);

对比运算符:

booloperator==

(constSocket&socket)const;

booloperator!

=(constSocket&socket)const;

booloperator<(constSocket&socket)const;

booloperator<=(constSocket&socket)const;

booloperator>(constSocket&socket)const;

booloperator>=(constSocket&socket)const;5常用socket操作

回来该socket的可读数据的字节数,该操作不导致socket堵塞:

intavailable()const;

封闭socket:

voidclose();

poll:

boolpoll(const

Poco:

:

Timespan&timeout,intmode)const;

///Determinesthestatusofthesocket,usinga

///calltoselect().

///

///Themodeargumentisconstructedbycombiningthevalues

///oftheSelectModeenumeration.

///

///Returnstrueifthenextoperationcorrespondingto

///modewillnotblock,falseotherwise.

SocketImpl*impl()const;

///ReturnstheSocketImplforthissocket.查看这个socket的衔接是不是是安全的(运用SSL或TLS):

boolsecure()const;

6缓冲区

发送数据的缓冲区:

voidsetSendBufferSize(intsize);

intgetSendBufferSize()const;

接收数据的缓冲区:

voidsetReceiveBufferSize(intsize);

intgetReceiveBufferSize()const;

7超不时刻

发送数据的超不时间:

voidsetSendTimeout(constPoco:

:

Timespan&timeout);

Poco:

:

TimespangetSendTimeout()const;

接纳数据的超不时刻:

voidsetReceiveTimeout(constPoco:

:

Timespan&timeout);

Poco:

:

TimespangetReceiveTimeout()const;

8其他接口

voidsetOption(intlevel,intoption,intvalue);

voidsetOption(intlevel,intoption,unsignedvalue);

voidsetOption(intlevel,intoption,unsignedcharvalue);

voidsetOption(intlevel,intoption,constPoco:

:

Timespan&

value);

voidsetOption(intlevel,intoption,constIPAddress&value);

voidgetOption(intlevel,intoption,int&value)const;

voidgetOption(intlevel,intoption,unsigned&value)const;

voidgetOption(intlevel,intoption,unsignedchar&value)const;

voidgetOption(intlevel,intoption,Poco:

:

Timespan&value)

const;

voidgetOption(intlevel,intoption,IPAddress&value)const;

voidsetLinger(boolon,intseconds);

voidgetLinger(bool&on,int&seconds)const;

voidsetNoDelay(boolflag);

boolgetNoDelay()const;

voidsetKeepAlive(boolflag);

boolgetKeepAlive()const;

voidsetReuseAddress(boolflag);

boolgetReuseAddress()const;

voidsetReusePort(boolflag);

boolgetReusePort()const;

voidsetOOBInline(boolflag);

boolgetOOBInline()const;

voidsetBlocking(boolflag);

boolgetBlocking()const;获取socket的IP和端口:

SocketAddressaddress()const;

获取peersocket的IP地址和端口:

SocketAddresspeerAddress()const;

9静态函数

select:

staticintselect(SocketList&readList,

SocketList&writeList,

SocketList&exceptList,

constPoco:

:

Timespan&timeout);

///Determinesthestatusofoneormoresockets,

///usingacalltoselect().

///

///ReadListcontainsthelistofsocketswhichshouldbe

///checkedforreadability.

///

///WriteListcontainsthelistofsocketswhichshouldbe

///checkedforwriteability.

///

///ExceptListcontainsalistofsocketswhichshouldbe

///checkedforapendingerror.

///

///Returnsthenumberofsocketsready.

///

///Afterreturn,

///*readListcontainsthosesocketsreadyforreading,

///*writeListcontainsthosesocketsreadyforwriting,

///*exceptListcontainsthosesocketswithapendingerror.

///

///IfthetotalnumberofsocketspassedinreadList,writeList

and

///exceptListiszero,select()willreturnimmediatelyandthe

///returnvaluewillbe0.

///

///Ifoneofthesocketspassedtoselect()isclosedwhile

///select()runs,selectwillreturnimmediately.However,

///theclosedsocketwillnotbeincludedinanylist.

///Inthiscase,thereturnvaluemaybegreaterthanthesum

///ofallsocketsinalllist.查看是不是撑持IPv4或IPv6:

staticboolsupportsIPv4();

staticboolsupportsIPv6();

C++POCO库中文编程参阅攻略(4)Poco:

:

Net:

:

IPAddress

1Poco:

:

Net:

:

IPAddress

地址最大长度,IPv4是in_addr的长度,IPv6是in6_addr的长度

enum

{

MAX_ADDRESS_LENGTH=

#ifdefined(POCO_HAVE_IPv6)

sizeof(structin6_addr)

#else

sizeof(structin_addr)

#endif

///Maximumlengthinbytesofasocketaddress.

};1.1IPv4orIPv6?

POCO用一个枚举类来表明:

enumFamily

///PossibleaddressfamiliesforIPaddresses.

{

IPv4,

IPv6

};1.2布局函数

回来一个全0的IP地址:

IPAddress();

复制布局函数:

IPAddress(constIPAddress&addr);

依据IP类型(IPv4或IPv6)创立一个全0的IP地址:

explicitIPAddress(Familyfamily);

用字符串类型的IPv4地址或IPv6地址来创立一个IP地址,其间IPv4是十进制表明的,IPv6是十六进制表明的:

explicitIPAddress(conststd:

:

string&addr);

用字符串类型的IP地址和指定的类型(IPv4或IPv6)创立一个IP地址,其间IPv4是十进制表明的,IPv6是十六进制表示的:

IPAddress(conststd:

:

string&addr,Familyfamily);

用原生IP地址in_addr或in6_addr数据布局和给定的字符串长度,创立一个IPAddress:

IPAddress(constvoid*addr,poco_socklen_tlength);

用原生IP地址in_addr或in6_addr数据布局和给定的字符串长度,创立一个IPAddress,其间scope参数用于IPv6,IPv4会疏忽这个参数:

IPAddress(constvoid*addr,poco_socklen_tlength,Poco:

:

UInt32scope);

1.3重载运算符

赋值运算符:

IPAddress&operator=(constIPAddress&addr);

比较运算符

booloperator==(constIPAddress&addr)const;

booloperator!

=(constIPAddress&addr)const;

booloperator<(constIPAddress&addr)const;

booloperator<=(constIPAddress&addr)const;

booloperator>(constIPAddress&addr)const;

booloperator>=(constIPAddress&addr)const;1.4常用操作

swap:

voidswap(IPAddress&address);

获取地址类型:

Familyfamily()const;

IPv6专用函数,回来scopeidentifier,如果是IPv4则回来0:

Poco:

:

UInt32scope()const;

toString,IPv4则显现“d.d.d.d”,IPv6则

std:

:

stringtoString()const;

poco_socklen_tlength()const;

constvoid*addr()const;

intaf()const;

voidmask(constIPAddress&mask);

voidmask(constIPAddress&mask,constIPAddress&set);

staticIPAddressparse(conststd:

:

string&addr);

staticbooltryParse(conststd:

:

string&addr,IPAddress&

result);

staticIPAddresswildcard(Familyfamily=IPv4);

staticIPAddressbroadcast();1.5IS函数

1.5.1是不是是未初始化状况

是不是是未初始化的全零状况(wildcard):

boolisWildcard()const;

1.5.2是不是是播送/组播/单播

是不是是播送地址(全零),与wildcard的区别是wildcard是未通过初始化的。

只要IPv4有播送地址,IPv6则回来false。

boolisBroadcast()const;

是不是是回环地址:

关于IPv4是127.0.0.1

关于IPv6是:

:

1

函数原型:

boolisLoopback()const;

是不是是多播:

关于IPv4是224.0.0.0到239.255.255.255规模;

关于IPv6是FFxx:

x:

x:

x:

x:

x:

x:

x的规模:

函数原型:

boolisMulticast()const;

是不是是单播:

boolisUnicast()const;

1.5.2其他函数

bool

isLinkLocal()const;

boolisSiteLocal()const;

boolisIPv4Compatible()const;

boolisIPv4Mapped()const;

boolisWellKnownMC()const;

boolisNodeLocalMC()const;

boolisLinkLocalMC()const;

boolisSiteLocalMC()const;

boolisOrgLocalMC()const;

boolisGlobalMC()const;1.5protected函数

protected:

voidinit(IPAddressImpl*pImpl);

C++POCO库中文编程参阅攻略(5)Poco:

:

Net:

:

SocketAddress

1枚举

最大地址长度,这个与Poco:

:

Net:

:

IPAddress中的界说能够类比,不过这里指的是`structsockaddr_in6

enum

{

MAX_ADDRESS_LENGTH=

#ifdefined(POCO_HAVE_IPv6)

sizeof(structsockaddr_in6)

#else

sizeof(structsockaddr_in)

#endif

///Maximumlengthinbytesofasocketaddress.

};2布局函数

创立一个wildcard的全0的IPv4的socket地址:

SocketAddress();

用Poco:

:

Net:

:

IPAddress和端口号创建IPv4或IPv6的SocketAddress:

SocketAddress(constIPAddress&host,Poco:

:

UInt16port);

用std:

:

string和端口号创立IPv4或IPv6的SocketAddress:

SocketAddress(conststd:

:

string&host,Poco:

:

UInt16port);

SocketAddress(conststd:

:

string&host,conststd:

:

string&port);

explicitSocketAddress(conststd:

:

string&hostAndPort);

复制布局函数:

SocketAddress(constSocketAddress&addr);

原生方法布局SocketAddress:

SocketAddress(conststructsockaddr*addr,poco_socklen_tlength);

3常用函数

swap:

voidswap(SocketAddress&addr);

获取IPAddress、端口和地址类型:

IPAddresshost()const;

Poco:

:

UInt16port()const;

IPAddress:

:

Familyfamily()const;

获取原生方法的地址长度、地址和地址族:

poco_socklen_tlength()const;

conststructsockaddr*addr()const;

intaf()const;

toString:

std:

:

stringtoString()const;

4重载运算符

booloperator==(constSocketAddres

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1