C++POCO库中文编程.docx
《C++POCO库中文编程.docx》由会员分享,可在线阅读,更多相关《C++POCO库中文编程.docx(11页珍藏版)》请在冰豆网上搜索。
![C++POCO库中文编程.docx](https://file1.bdocx.com/fileroot1/2022-12/14/df6c1cef-43a9-4b10-bc51-92f5a0bff4e6/df6c1cef-43a9-4b10-bc51-92f5a0bff4e61.gif)
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