s60 c/s模型
Client/ Server
那我来抛砖引玉吧。你如果明白了,我也就省得跑路了。哈哈
symbian中的client/server机制:
Server和Client一般在不同的进程中运行,因此它们之间的通讯需要使用内核提供的某种IPC机制来进行通讯。Symbian提供一些封装好了的RSessionBase/CServer/CSession类供Client来建立和Server之间的连接,C/S之间通过消息(RMessage类)来进行通信,这样将内核的IPC实现细节隐藏在C++的函数调用中。
可以将Symbian中的C/S结构类似到一个基于TCP的Socket实现中。在一个典型的TCP Socket连接中,大概有如下的步骤:
1. Server启动,阻塞在Accept中等待客户请求
2. Client创建一个Socket,调用Connect尝试进行连接
3. Server从Accept返回,创建一个新的Socket和该Client进行通信
Symbian的C/S结构为:
1. Client创建一个RSessionBase,调用Connect方法连接Server
2. CServer当时阻塞在NewSession中,收到客户连接请求后,创建一个CSession该Client进行通信
3. 然后Client通过RSessionBase::SendReceive发送请求,Server端的CSession收到该请求并执行之。
因此,RSessionBase类似于TCP Socket中的Client端的套接字,CServer就是Server端那个Listen的套接字,CSession就是Server端用来和client通信的套接字。当然它们实际上有太多的不同。
稍微具体一点的基本流程是:
首先,Server开发者一般会提供给Client一个RSessionBase的派生类,例如我们常见的RFs。在这个
RSessionBase的派生类中,封装了一些函数,例如如何建立一个到Server的连接(按照惯例,该函数命名为Connect),如何将request进行封装等。
Client于Server之间的典型通讯步骤:
1. Client调用一个RSessionBase派生类的Connect函数,例如 RMyServerSession::Connect
2. 该函数内部实现将寻找当前系统运行的Server(通过TFindServer),如果没有发现该Server运行,则;
3. 启动该Server(通过RThread::Create函数在另一个线程中启动,或者通过RProcess::Create函数在一个独立的进程中启动该Server,后面这种比较常见)。
Server被启动后,Server内部的实现大概如下:
在Server线程中,首先安装一个CActiveScheduler,然后创建一个具体的CServer对象,CServer本身继承自CActive,这样就使得Server可以被CActiveScheduler调度。然后启动该Server(调用
CServer::StartL,大概CServer的内部实现是调用基类CActive::SetActive,表明自己发出了一个请求,希望该请求完成时被调度,对于CServer,它发出的请求就是希望收到Client的连接),然后进入wait loop(调用CActiveScheduler::Start函数)。当有客户通过CreateSession发送连接请求时,Scheduler将调用CServer::NewSessionL函数。
4. client调用RSessionBase::CreateSession函数建立一个到Server的连接(通过Server的名字)。(估计内核根据Server名字,找到对应该名字的线程RThread,然后就可以建立一个通道,估计RSessionBase中的iHandler成员变量用来代表这个连接通道,同时估计Server端的CSession中的RThread iClient成员
client与server交互进阶_IT/计算机_专业资料。FMS资料Server 端与 Client 端 method 触发与 data 广播概念 在 FCS 的应用上常会需要让 Client 与 Server 间的...
Browser/Server 结构 VS. Client/Server 结构 在目前的应用系统中,有大量的系统采用的 Client/Server 结构,也有很多的 系统采用了 Browser/Server 结构。Client/...
client server model_计算机/互联网_科技_PPT专区。客户服务器模型介绍Client/Server Model ---Group 3 Definition ? The client/server model is a computing mo...
{ struct sockaddr_in client_address; int len; int client_sockfd; char *data = "Server to Client String!\n"; char data2[100]; pid_t pid; printf...
OPC Server 及 Client系统_IT/计算机_专业资料。详细介绍OPC Client以及OPC Server第五章:Modbus 通信最新发展 1 OPC Server 及 Client 系统 1.1 何谓 OPC ...
java client server_IT/计算机_专业资料。java client serverimport import import import import import import java.io.BufferedReader; java.io.IOException; ...
VB中用ADO连接数据库的操作中遇到CursorLocation的adUseClient和adUseServer这两个属性值,收集了些资料,帮助理解。服务器端游标将结果集放在服务器的缓冲区内,客户端...
server client_其它语言学习_外语学习_教育专区 暂无评价0人阅读0次下载举报文档 server client_其它语言学习_外语学习_教育专区。...
关于thrift client和server的编写方法_计算机软件及应用_IT/计算机_专业资料。使用 Thrift RPC 编写程序 1. 概述 本文以 C++语言为例介绍了 thrift RPC 的使用...
VisualSVN_Server、SVN_Client安装_配置_使用图文教程_超经典_IT/计算机_专业资料。本文介绍了SVN_Server和SVN_Client的配置和使用方法,图文并茂,看过之后,定让你...
热门文档