Symbian OS sockets API
2010-07-22 01:42:00 来源:WEB开发网就像是RSocket一样,RHostResolver类继承自RSubSessionBase。因此,要想使用RHostResolver类,客户端应用程序就必须先进行对socket服务组件的服务器的连接,这个服务组件的服务器就是一个RSocketServ类的实例。
RHostResolver类提供了许多主机地址解析服务的函数/方法,每一个函数都提供了两个版本的多态函数--同步和异步操作。
请注意,因为这是一个通用的主机地址解析接口,但是并不是所有的协议都提供了主机地址解析服务,所以有些协议可能并没有提供任何主机地址解析服务。
如果客户端应用程序尝试使用RHostResolver中的函数去对一个不支持主机地址解析服务的协议请求主机地址解析服务,那么将会得到错误代码KErrNotSupported。
在进行任何主机地址解析服务之前,我们要打开一个RHostResolver类的实例。正如前面所提到过的,因为主机解析服务类是一个子会话类,所以在调用RHostResolver::Open()函数之前,该子会话类必须关联一个socket服务组件的服务器会话对象实例。
TInt Open(RSocketServ& aSocketServer, TUint anAddrFamily, TUint aProtocol);
下一步,我们将会根据上面所示的函数原形,制定我们希望用哪个地址类型来解析的主机地址,地址类型应该是和传递给RSocket::Open()函数的参数一致的。
最后,我们还需要指定一个协议来进行主机地址解析服务。如果之前选择的地址类型是协议无关类型的,那么我们可以在这里指定KUndefinedProtocol。
其他的RHostResolver类提供的函数如下所示:
TInt GetByName(const TDesC& aName, TNameEntry& aResult); TInt GetByAddress(const TSockAddr& anAddr, TNameEntry& aResult); TInt GetHostName(TDes& aName); TInt SetHostName(const TDesC& aName); // sync only TInt Next(TNameEntry& aResult);
这些函数中的大多数都是可以见名知意的;不过Next()函数例外,我们来进行一些解释:对于有些协议来说,GetByName()和 GetByAddress()函数可能会一次找到不止一个结果,比如地址假名被允许的时候。如果这样的话,我们就需要调用Next()函数来返回下一个地址结果。
域名服务(DNS)
域名解析服务(Domain Name Service,DNS)是TCP/IP协议所提供的主机解析服务。
一个标准的DNS查询一般由以下三个步骤组成:
更多精彩
赞助商链接