版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第七章:的客户端编程第七章:的客户端编程 的客户端简介:的客户端简介: 有两种客户端: 本地客户端和远程客户端。 (本地客户端): 是指与服务器在同一台机器上,不用通过网络 就可以访问到服务器的客户端 。 (本地客户端):是指要通过网络才可以访问到服务器的客户端。 下图为应用系统的客户端访问服务器上的服务的过程图。 说明: ( ) 用于指产品的客户端部分 ( ) 系统自带的一个,它侦听一个指定的端口,最初与该 建立连接 ( ) 系统自带的一个,由它处理与 之间的通讯。 (公告板) 把系统的配置保存在一个共享内存中,该共享内存称为公告板() 的管理进程,主要对公告板等进行管理 与与 建立连接的过
2、程为:建立连接的过程为: 1 调用()或() 2 采用在中指定的地址与服务端的建立连接 3 为该指定一个,并把该的侦听端口返回给 4 采用返回的端口与指定的建立连接,并与断开连接,这之后与 之间的通讯通过进行处理,与无关。 5 ()或()调用返回。 本地客户端与远程客户端的主要区别本地客户端与远程客户端的主要区别 1. 本地客户端只能用语言或语言编写,远程客户端可以用几乎所有的编程语言编 写。 2. 在远程客户端所在的机器上要安装的客户端软件,并且在设置相应的环境变量; 在本地客户端上不用 3. 用编译远程客户端程序时要加 ,编译本地客户端则不用 与远程客户端有关的配置:与远程客户端有关的配置
3、: 1 在中要配置,即最多可以有多少个远程客户端同时连接 到该服务器上。 2 在中要配置: 中可带的参数为: 参数说明: : 的侦听端口,远程客户端通过该端口与服务器建立连接 : 最少启动多少个进程 : 最多启动多少个进程,默认值为 :每个进程可以同时与多少个远程客户端建立连接 如果在远程客户端与服务器之间传送的数据包大小(单位为字节)超过指定的参 数,就自动进行数据压缩, : 指定一个远程客户端的空闲时间,如果该远程客户端在这么长的时间内没有做任何调用,将断开与该远程客户端的连接。单位为分钟,如果没有指点该参数,那么永远不会自动断开远程客户端的连接 : 指定远程客户端与建立连接的时间,如果在
4、指定的时间内还没有建立连接,那么连接将失败。如果没有采用安全认证方式默认为*秒,。如果采用安全认证方式默认为*秒, :指定可以使用的端口范围: 如果远程客户端要跨越防火墙才能访问该应用系统,在中要指定该参数,指定可以使用的端口范围,并让防火墙允许访问这些端口。如果不指定,会根据系统端口的使用情况进行分配,而分配的端口防火墙不允许通过,造成无法调用 。如下面的设置指定可用的端口范围为 。 在远程客户端的机器上要设置的环境变量在远程客户端的机器上要设置的环境变量 (必需):客户端在该机器上的安装目录 (必需):远程客户端通过该地址与服务器建立连接,它的值为参数的值, 如在上面的配置中为: (可选)
5、: 该客户端的类型,如果与服务器的类型一样,那么在它们之间进行数据 传送时不用进行编码解码工作。 其他不常用的环境变量可参考的联机文档。 客户端的编程模式:客户端的编程模式: 在层结构中,是属与表示层,表示层主要处理与用户交互,它的功能可概括为: 、提供应用的用户交互接口,即主要通过图形化的用户界面,取的用户的输入数据 、与 应用服务器建立连接 、调用应用服务器上的服务(),把客户端的输入参数放入输出缓冲区。 、应用服务器调用相应的处理客户端的请求,把处理结果通过客户端的输 入缓冲区返回给客户端。 客户端与服务端之间的通讯方式有以下几种:客户端与服务端之间的通讯方式有以下几种: 、同步调用:
6、、异步调用 、会话方式: 、可靠消息队列 、广播方式 、发布订阅 在下一章我们再具体介绍 的介绍的介绍 客户端通过调用提供的编程()来编写程序,下面介绍一些客户端主要的 与连接的建立与断开有关的与连接的建立与断开有关的 为了与 建立连接 要调用()检查该 所采用的安全方式,并根据得到的值做相应的处理,然后调用()建立与的连接,在 的结果返回 之后,调用()断开与 的连接. () 描述: 检查该 所采用的安全方式 参数:无 返回值: :不需要认证 :需要口令认证 :需要口令认证,并且还需要应用级的认证或授权. :调用失败, 错误号保存在全局变量中。 ( *) 描述: 与 建立连接 参数 返回值:
7、 失败返回, 错误号保存在全局变量中。 结构体在中的定义如下结构体在中的定义如下 ; * * ; * * ; * * ; * * ; * * ; * * ; * * ; ; 说明用于安全认证中 :用于定义以何种方式通知该客户端一个 的到来.它的值可以为: () 描述: 断开与 建立连接 参数:无 返回值: 失败返回, 错误号保存在全局变量中。 与请求与请求 有关的有关的 ( *, *, , *, *, ) 描述:客户端同步调用服务端的名为的, 参数: *:的名称 *: 输入缓冲区的地址,客户端传给服务端的参数放在该缓冲区内 : 输入缓冲区的长度 * 输出缓冲区的地址,服务端传给客户端的结果放在
8、该缓冲区内 *:输出缓冲区的长度 : 调用标志,由以下几个: 如果调用的客户端当前在方式下,那么不参与当前的。 如果服务端返回的缓冲区类型与客户端定义的缓冲区()类型不一致,默认情况下,会转换成与服务端返回的缓冲区类型一致的类型,如果设置了该,那么当出现这种情况时,不进行缓冲区类型转换,并且会保错。 默认情况下,如果客户端有阻塞条件存在(如的中的缓冲区满,磁盘忙等),那么客户端会阻塞在那里,直到阻塞消除或超时出错。如果设置了,当客户端有阻塞条件存在时()会立刻返回并报错. 注意只对发送请求时起作用,如果在接收服务端返回的结果时有阻塞条件存在,客户端会在那里等待,直到阻塞消除或超时出错 如果客户
9、端有阻塞条件存在,客户端会一直阻塞在那里,即使到了超时时间也不返回,但如果该客户端是在模式下,当到了 事务的超时时间,还是会报超时错误并返回。 如果在进行系统调用时,被信号中断,该系统调用会重新进行。 调用成功返回,失败返回, 错误号保存在全局变量中。 ( *, *, , ) 描述: 客户端异步调用服务端的名为的,不等服务端返回结果,程序可继续往 下走,在某个地方调用()取的服务端的返回 参数: *, *, 参数的含义与()中的一样 可设置为:, , , . , , 的含义与与()中的一样 :调用()的客户端不想接收端的应答。如果设置了 :服务端不会给该客户端发送应答。 返回值: 失败返回,成
10、功返回一个,可作为的参数,用于取应答 ( *, *, *, ) 描述:取出服务端对()的应答。 参数: ()返回的 *返回缓冲区的地址,服务端传给客户端的结果放在该缓冲区内 *:返回缓冲区的长度 :可以是:, ,(不管的值,从服务 器的应答队列中取第一个可用的消息), 返回值: 失败返回,错误号保存在全局变量中。 ( ) 描述: 如果当前的程序不处于事务模式中,取消对()的应答, 如果处于事务模式 中,则不能取消对()的应答,该调用会失败. 参数: ()返回的 返回值: 失败返回,错误号保存在全局变量中。 () 描述:返回最近发送()()或接收()的一个消息的优先级 参数:无 返回值: 消息的
11、优先级,值越高, 优先级越高 失败返回, 错误号保存在全局变量中。 ; * * ; * * ; (; ; ) * * (, , , ); * * (); * () * (*) , , (), ); (; ; ) (, , , ); ( , ) 描述: 设置下一个要发送的消息的优先级 参数: 为相对值, 设置下一个要发送的消息的优先级为现在的优先级加上 : 为绝对值, 设置下一个要发送的消息的优先级为 返回值: 失败返回,错误号保存在全局变量中。 与请求错误处理有关的与请求错误处理有关的 *( ) 描述:返回错误号为的错误描述 参数: :在中定义的全局变量,用于标识错误号,类似于中的 返回值:
12、失败返回,成功返回错误号为的错误描述. ( ) 描述: 返回当前进程或线程最近调用的出错的更详细的描述 参数:设为 返回值: 如果没有错误返回,有错误返回错误描述号 * ( , ) 描述: 返回错误描述号的详细描述信息 参数: : ()的返回值, : 设为 返回值: 失败返回,成功返回详细描述信息 采用语言编写的客户端程序采用语言编写的客户端程序 如果是采用语言编写的客户端程序,可直接采用的函数,这些函数在中定义.采用语言编写的客户端的例子在此不列举,可参考等例子.采用语言编写客户端的编译是用命令进行的,它的使用格式如下: 参数说明: : 编译用写的客户端 : 输出详细的编译信息 : 编译成
13、,如果不带该参数,那么将编译成 . : 编译生成的可执行文件名 : 要编译的文件名 : 指定要编译生成该可执行文件名要连接的其他库文件,如果有多个库文件要连接,它们之间用空格隔开. : 指定该要连接的 调用或编译器来进行编译工作.所以客户端所在的机器要有编译器才能编译客户端的程序. 如果是客户端,可安装,并在环境下编译客户端的程序. 如果在安装时没有把自动设置环境变量的选项选上,中设置环境变量的文件在安装目录下的中,可手工执行它或在设置环境变量的文件中用调用它,如: : : : 如果是客户端,可安装等或编译器.并在环境变量中设置所用的编译器路径. 采用编写客户端程序采用编写客户端程序 采用编写
14、客户端程序与采用语言编写客户端的方式一样,但要对要进行一些设置才能进行编译,说明如下: 1. 在下的 中加上,如图所示: 2. 在下的 中选 ,然后加上的目录,如图所示: . 在下的 中选 ,然后加上的目录,如图所示: 采用编写客户端程序采用编写客户端程序 . . 函数的声明函数的声明 对,等客户端,提供一个编程接口,该文件名为,首先要在这些语言中声明所要用到的函数。因为中没有指针,我们把它们声明为型。如果是双重指针,可声明为 . 下面声明采用编写段程序常用到的函数 ( ) ( ) ( , , ) ( , ) ( , ) ( , , , , , ) ( ) ( ) ( ) ( ) ( , )
15、( , , , ) ( , , , ) ( , , , , ) () ( ) ( , , , , ) ( , , , , ) ( , , , , ) ( , ) ( , ) ( , , ) ( ) ( ) ( ) ( , ) ( ) ( , , , , ) ( , , , , ) . (). ()缓冲区的定义缓冲区的定义 在中缓冲区中字段的在*文件中定义,在中可以把它们定义为常量 . .编程方式的改变编程方式的改变 在两层的结构中,客户端直接访问数据库,当采用中间件后,形成三层结构。这时,客户端不直接访问数据库,而是改为调用中间件服务端上的服务,由服务端访问数据库,并把结果返回给客户端。所以这
16、时候客户端上不用安装数据库的客户端,中的数据窗口的数据源也只能采用外部数据源。因为不能直接与数据库建立连接. . .对存储过程的处理对存储过程的处理 推荐的做法是把存储过程转换为 的,这样做工作量比较大,但是完全的层结构,另一种方式是存储过程不变,用一个 的去调用该存储过程,把结果返回给客户端. . .例子例子 下面我们举两个例子来说明在中编写客户端程序的方法. 为了方便在例子中调用,我们重新定义对缓冲区进行操作的函数如下: ( )( ) *作用:写一个浮点型数据到缓冲区的指定位置中 输入参数: : 缓冲区 : 号 : 位置 : 要写入的浮点型数据 输入参数:无 返回值: 成功,失败 * (); () () ( ( () )出错: () ( )( ) *作用:写一个整型数据到缓冲区的指定位置中 输入参数: : 缓冲区 : 号 : 位置 : 要写入的整型数据 输入参数:无 返回值: 成功,失败 * (); () () ( ( () )出错: () ( )( ) *作用:写一个字符型数据到缓冲区的指定位置中 输入参数: : 缓冲区 : 号 : 位置 : 要写入的字符
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《仓库现场管理》课件
- 《仓库库存管理系统》课件
- 《小学细节描写》课件
- 单位管理制度集粹选集员工管理篇
- 单位管理制度合并汇编【职员管理】
- 四川省南充市重点高中2024-2025学年高三上学期12月月考地理试卷含答案
- 单位管理制度分享合集职员管理篇十篇
- 单位管理制度范文大合集【人事管理】十篇
- 单位管理制度呈现大全职工管理篇十篇
- 《运算律》教案(20篇)
- 产品经理必备BP模板(中文版)
- 维西县城市生活垃圾热解处理工程环评报告
- GB/T 9128.2-2023钢制管法兰用金属环垫第2部分:Class系列
- 网络经济学PPT完整全套教学课件
- 2023年主治医师(中级)-临床医学检验学(中级)代码:352考试参考题库附带答案
- 机械原理课程设计锁梁自动成型机床切削机构
- 顺产临床路径
- 人教版培智一年级上生活适应教案
- 推动架机械加工工序卡片
- RoHS检测报告完整版
- 中国近现代史纲要(上海建桥学院)智慧树知到答案章节测试2023年
评论
0/150
提交评论