服务器运行于独立的进程中
内核服务器: 该服务器的优先级最高,控制着从其他进程对硬件和内存的访问
RTimer 提供异步时间服务
RThread 提供线程访问和创建
RSemaphore 允许线程间的同步
文件服务器: 该服务器提供对文件系统的访问
RFs 提供对文件服务器的会话, 可以完成驱动器, 目录和文件的高层操作
RFile 允许文件的创建,读取和写入
RDir 读取目录的入口点
窗口服务器: 应用程序框架使用窗口服务器来处理按键事件和屏幕绘制
RWindow 用于对屏幕进行绘制,但是在开发中使用不多,用的较多的是对于CCoeControl::Draw()的覆写
RAnim 用于对服务器端的动画通信,它在同一线程中的优先级较高
CWindowGc 通行上下文,提供了对屏幕进行绘制的函数
字体与位图服务器: 该服务器在客户端共享字体和位图
RFbsSession 负责字体和位图服务器的绘画管理
CFbsBitmap 进行位图处理
CFbsDevice 用于进行位图绘制的图象设备
消息服务器: 可以保存消息数据,并且获取对MMS,SMS,OBEX和 EMAIL的操作
CMsvSession 实现与消息服务器的会话,并且提供对消息存储的接入,以及消息服务器相关提示操作
CMsvEntry 提供对消息存储的接入点
CBaseMtm 提供高层的接口,用来接入和操作消息服务器接入点
服务器运行与同一个进程的不同线程中
电话服务器:负责设备的电话操作
RTelServer 提供对电话服务器的基本接入,电话扩展模块TSY的载入可以实现对设备电话功能的使用
RPhone 提供对设备上指定电话的操作
RLine 提供对电话中某一线路的操作
RCall 提供某一线路上的拨号/接听操作
套接字服务器: 提供通过媒介进行tcp/ip和udp套接字连接的功能
RSocketServ 连接到套接字服务器,并且发现可用协议
RSocket 提供与另一个套接字连接,接收和发送数据的功能
RHostResolver 进行DNS动态域名服务操作,获取远程设备地址
通信服务器: 允许开发者通过电缆或红外进行串行通信
RCommServ 提供与通信服务器的会话
RComm 提供通过串行端口进行通信的必要函数
服务器插件
服务器允许采用插件的形式提供对新技术,协议和媒体的支持,例如
消息服务器包括MMS,SMS,POP3,SMTP,等 .
套接字服务器包括红外,蓝牙,CSD拨号等等
可以看到消息服务器通过一系列的消息协议来进行发送和接收,它允许添加各种消息类型模块MTM
服务器会话
他的结构 CServer2-CSession2-RSessionBase-RSubSessionBase
会话流程
1.调用客户端接口API,例如使用文件服务器的客户端API RFs::Drive() 来获得驱动器信息
2.调用RSessionBase::SendReceive(),通过传递操作码和指针作为参数,就可以实现服务器对客户端数据进行读取和设置.
3.通过内部对函数RSessionBase::SendSync()的调用,实现对内核的调用
4.内核调用服务器线程中的CSession2::ServiceL(),并且将消息内容的引用作为参数传递给该函数,并且用操作码来说明进行何种操作
5.调用RMessage2:WriteL()对客户端地址空间进行设置
6.调用RMessage2::Complete()指示客户端的请求已经完成
下面以文本服务器使用为例
class RFs : public RSessionBase{...}
class RFsBase : public RSubSessionBase
{
public:
IMPORT_C void Close();
};
class RFile : public RFsBase
{
public:
IMPORT_C TInt Open(RFs& aFs, const TDesc& aName, TUint aFileMode);
IMPORT_C TInt Create(RFs& aFs, const TDesc& aName, TUint aFileMode);
IMPORT_C TInt Read(TDesc8& aDes) const;
IMPORT_C TInt Write(const TDesc8& aDes);
....
}
从文本文件读取数据的功能
HBufC8* CFileUtil::ReadL(const TDesC& aFileName)
{
RFs fs;
User::LeaveIfError(fs.Connect());
CleanupClosePushL(fs);
RFile file;
User::LeaveIfError(file.Open(fs, aFileName, EFileRead));
CleanupClosePushL(file);
TInt fileSize;
file.Size(fileSize);
HBufC8* data = HBufC8::NewL(fileSize);
file.Read(*data);
CleanupStack::PopAndDestory(2);
return data;
}
实验:这个实验的目的是跟踪调试一段MyApp的程序,来了解一下symbian的执行顺序,下面
是我的实验记录
用向导创建好MyApp程序后,给里面的入口E32Main加上断点,编译执行,顺序如下
E32Main --> NewApplication --> CMyApplication::CreateDocumentL该函数位于MyAppApplication.cpp -->
CMyAppDocument::NewL该函数位于MyApp.cpp --> CMyAppDocument::CreateAppUiL该函数位于MyAppDocument.cpp -- > CMyAppAppUi::ConstructL该函数位于MyAppAppUi.cpp -- >
CMyAppAppView::NewL该函数位于MyAppAppView.cpp
整个流程执行完毕
执行exit菜单项 断点停留在CMyAppAppUi::HandleCommandL该函数位于MyAppAppUi.cpp
因为执行的是exit命令该函数会处理EAknSoftkeyExit命令
再执行,断点停留在CMyAppAppUi的析构函数,用来删除应用程序视图
再实行,断点停留在CMyAppDocument的析构函数
最后退出 , 试验结束
分享到:
相关推荐
本文将深入探讨ROS中的动作服务器和客户端,以及如何使用C++来实现它们。 首先,理解ROS的动作系统是关键。动作与服务类似,都是ROS中的一种通信机制,但服务通常处理一次性请求-响应交互,而动作则用于处理更复杂...
【C++知识点】 ...这些笔记涵盖了软件工程师必备的技术栈,从基础语言到高级框架,为深入学习和理解提供了丰富的参考资料。无论是初学者还是经验丰富的开发者,都能从中获益,提升自己的专业技能。
### ActiveMQ学习笔记知识点梳理 #### 一、ActiveMQ简介 **定义:** - **ActiveMQ**是由Apache出品的一款功能强大的开源消息中间件。作为消息队列(Message Queue,简称MQ)的一种,它主要用来在分布式系统之间...
开发者可以通过创建和管理套接字对象,实现客户端和服务器端的交互。 **MFC并发与多线程** MFC支持多线程编程,CWinThread类提供了线程的基本操作,包括创建、同步和通信。这对于开发需要并行处理的复杂应用程序至...
2. **Hessian服务端集成**:在服务器端,开发者需要配置Hessian服务,这通常涉及到创建Java服务接口和实现。Hessian库将这些Java对象暴露为二进制HTTP服务,使得Flex客户端可以调用。 3. **Hessian客户端API**:在...
这是一个名为"selfimpr学习笔记合集(20101212)"的压缩包文件,其中包含了作者关于多种编程语言和相关技术的个人学习笔记。这些笔记涵盖了Python、PHP、Java、JavaScript和C这五种语言,以及可能涉及的各种框架和...
这些学习笔记涵盖了多个重要的IT技术领域,主要针对高级程序员,旨在深入理解和掌握各种编程语言、框架和数据库管理系统。以下是对每个主题的详细说明: 1. **C++**:C++是一种中级语言,由C语言发展而来,支持面向...
- Socket通信:客户端和服务器端的创建与交互。 - URL和URLConnection:访问网络资源。 9. **反射机制**: - 类加载器:如何动态加载类。 - 获取类信息:Class类的使用,获取类名、构造器、方法和字段。 - ...
J2SE(Java 2 Standard Edition)是Java平台的核心部分,提供了用于开发和运行桌面应用、服务器端应用以及网络应用的基础框架。 在这些学习笔记中,你可以期待以下关键知识点的详细讲解: 1. **Java基础**:从环境...
Java的Socket类和ServerSocket类简化了网络编程,使得创建客户端和服务器端的应用变得简单。理解TCP和UDP协议的区别,以及如何利用Java API实现网络通信是网络编程的关键。 通过深入学习和实践以上知识点,你将...
这个框架允许开发者使用Delphi或C++Builder等RAD工具,以桌面应用程序的方式来开发Web应用,大大简化了Web开发流程。下面将详细介绍IntraWeb的关键知识点。 1. **控件与用户界面**: IntraWeb提供了丰富的服务器端...
Java-J2SE(Java Standard Edition)是Java平台的核心部分,主要面向桌面应用和服务器端开发。这份"Java-J2SE学习笔记"包含了丰富的Java基础知识,是初学者和进阶者的重要参考资料。以下将从几个关键知识点进行详细...
网络编程也是Java的一大特色,笔记会涵盖Socket编程,讲解如何创建客户端和服务器端的通信。 对于并发编程,笔记会介绍线程和进程的概念,如何创建和管理线程,以及同步和互斥机制,如synchronized关键字和wait/...
### CoreJava学习笔记 #### 一、JAVA特点与运行原理 **JAVA特点:** 1. **简单性**:Java的设计者们将C++语言中许多不易理解和容易混淆的部分去除,使得Java更容易理解与掌握。 2. **面向对象**:Java几乎一切都...
在实际应用中,JavaScript不仅可以用于浏览器端,还可以通过Node.js在服务器端运行。Node.js提供了一个非阻塞的I/O模型,使得JavaScript成为构建高性能网络应用的理想选择。此外,JavaScript还有大量的第三方库和...
- Socket编程:创建客户端和服务器端的连接,实现数据传输。 - URL和URLConnection:访问网络资源,读取或写入数据。 8. **反射** - 动态类型检查:在运行时获取类的信息,如类名、方法名等。 - 动态实例化:在...
- **GIS 服务器端功能扩展**:使用 COM 和 .NET 语言。 - **桌面应用**:使用 COM、.NET、Java、C++ 等语言。 #### 五、ArcGIS Server 的优势 - **成本节省**:通过浏览器作为客户端,降低了多用户部署的成本。 - *...
- Winsock:使用Winsock API进行网络通信,实现客户端和服务器端的连接。 通过这些章节的学习,读者可以全面掌握VC++编程的基本技能,从基本语法到面向对象设计,再到高级主题如多线程和网络编程。这些源代码提供...