Symbian 网络编程API收藏
2010-09-06 08:09:00 来源:WEB开发网上面的电话通信例子,就是一个很好的一部通信系统的例子。
当我们使用socket来在两台计算机之间传输数据的时候,我们看到的是一个类似上面打电话例子的异步模型。
在一个使用socket进行网络通信的应用程序中,上述异步通信的事件包括:
连接, 断开连接以及确认请求连接的要求
接受数据(因为我们并不知道有多少数据要发送过来,所以这个过程是异步的)
发出数据(因为对于应用程序层来说,我们并不知道底层的硬件需要多长时间才能够将数据发出,所以这个过程也是异步的)
其他,比如载入协议模块之类的,看似并不是十分明显的异步操作
因为我们需要在应用程序中处理这些异步事件,所以我们需要用到Symbian OS的活动对象(Active objects, AOs)来解决这些问题。
活动对象的特点有:
使得应用程序开发者可以很容易的控制对象的生存周期
在一个单线程程序中完成并非严格意义上的多任务操作
为Symbian系统提供了效率较高的单线程多任务解决方案,而并不是真正地使用多线程。
在Symbian系统中,所有的线程都是通过一个或者多个活动对象,使用一个激活的进度管理器来进行高效率的外部事件处理。
一个活动对象,在一个时间内只能处理一个事件源。在实际情况中,活动对象通常也都是被设计为处理一类特定事件的。
在稍后的代码示例中,这些代码因为有不同的需求所以使用了不止一个活动对象,无论是客户端还是服务器程序,都使用了不止三个活动对象。其中一个用来处理连接机制,一个用来接收数据,另外一个用来发送数据。
下面我们就来看看如合利用活动对象来处理客户端和服务器之间进行socket流式连接的范例。
代码示例: 连接sockets
下面一部分就是借助代码的演示来向大家说明如何利用活动对象进行socket连接。这写代码段是从一个进行监听接入连接的‘服务器’和发送连接请求到服务器的‘客户端’程序中提取出来的。
服务‘监听’类的定义
下面的代码是从一个完整的进行‘监听’(listening)的服务器类定义中取出的一部分。
class CModel : public CActive {
public:
void StartEngineL(void);
private:
void RunL(void);
void DoCancel (void);
更多精彩
赞助商链接