注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Simon

 
 
 

日志

 
 

Symbian Cactive和RSocket笔记  

2010-06-17 02:45:31|  分类: Symbian C++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Symbian 异步服务框 架

您的浏览器可能不支持显示此图像。

1. CActive活动对象

活动对象主要用于向Asynchronous Servie Provider提交异步请求和取消异步请求;提交异步请求调用SetActive();DoCancel()函数用来取消异步请求;

在实现异步对象时,一定要实现RunL()DoCancel()这两 个函数;RunL()函数由CActiveScheduler活动调度器调用,而DoCancel()函数在取消异步请求时调用。 

2. CActiveScheduler活动调度器

活动调度器实际上是一个“等待循环”,它一直等待事件。当 接收到标记事件发生的信号时,活动调度器从从多可能的事件中判断那个事件发生,然后调度合适活动对象的RunL()函数 来执行。

注意:每个RThread都 有一个CActiveScheduler, 而每个CActiveScheduler可以处理多个CActive,通过add()函数来添加CActive 

3. Asynchronous Servie Provider异步服务提供者

Asynchronous Servie Provider有很多种,可以根据不同的需求来选择。 

Symbian中使用TCP/IP协议进行通信

Symbian系 统中网络编程主要支持IPICMP, TCPUPD协议;主要使用RSocketServerRSocketRHostResolverTInetAddr

RSocketServer:用来建 立和内核端socket服务组件之间的连接以及相关资源。应用程序中所有与socket相关的操作都 要该类的一个实例来进行操作。

RSocket:用来建立连接,发送和接受数据等等。

RHostResolver:域名解释。

TInetAddr:用来保存地址和 端口。 

  1. 如何应用RSocket

范例:

    Tint err

    RSocketServ ss

    RSocket sock

    err = ss.Connect();

    err = sock.Open(ss, KAfInet, KSockStream, KProtocolInetTcp);

每一个RSocketOpen时都要有一个RSocketServ实例,而其他参数如下:

AddrFamilyKAfInet or KAfInet6 for IPv6

socketTypeKSockStream(TCP/IP)or KSockDatagram for UDP

protocolKProtocolInetTCP or KProtocolInetUDP 

  1. 如何connectdisconnect

RSocket::Connect()用于连接到远端服务器,参数如下:

AddrFamilyKAfInet or KAfInet6 for IPv6

socketTypeKSockStream(TCP/IP)or KSockDatagram for UDP

protocolKProtocolInetTCP or KProtocolInetUDP

注意:如果socket采用的是UDP协议,则 不需要connect

RSocket::CancelConnect()用于取消连接

RSocket::Shutdown()用于异步的关闭连接。 

  1. 如何获取和设置IP地址

RSocket::LocalName()用于获取本地的地址信息,类型为TInetAddr

RSocket::Bind()用于绑定socket地 址,类型为TInetAddr

注意:在调用RSocket::Listen必须先Bind地址

RSocket::RemoteName()用于获取远端服务器地址信息。 

  1. 发送和接收数据

发送数据

RSocket::Send()采用TCP/IP协 议的

RSocket::SendTo()采用UDP协议的

发送数据

RSocket::Recv(), RSocket::Read(), RSocket::RecvOneOrMore()采用TCP/IP协议

RSocket::RecvFrom()采用UDP协议 

  1. 域名解释

使用RHostResolver类进行域名的解释和反解释,使用前要先调用RHostResolver::Open()使用后要调用RHostResolver::Close()关闭

而获取域名信息主要用下面两个函数

RHostResolver::GetByName()

RHostResolver::GetByAddress();

  评论这张
 
阅读(828)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018