收藏 分销(赏)

TUXEDO的客户端编程.docx

上传人:pc****0 文档编号:8839989 上传时间:2025-03-04 格式:DOCX 页数:12 大小:101.62KB
下载 相关 举报
TUXEDO的客户端编程.docx_第1页
第1页 / 共12页
TUXEDO的客户端编程.docx_第2页
第2页 / 共12页
点击查看更多>>
资源描述
第七章:的客户端编程 的客户端简介: 有两种客户端: 本地客户端和远程客户端。 (本地客户端): 是指与服务器在同一台机器上,不用通过网络 就可以访问到服务器的客户端 。 (本地客户端):是指要通过网络才可以访问到服务器的客户端。 下图为应用系统的客户端访问服务器上的服务的过程图。 说明: ( ) 用于指产品的客户端部分 ( ) 系统自带的一个,它侦听一个指定的端口,最初与该 建立连接 ( ) 系统自带的一个,由它处理与 之间的通讯。 (公告板) 把系统的配置保存在一个共享内存中,该共享内存称为公告板() 的管理进程,主要对公告板等进行管理 与 建立连接的过程为: 1. 调用()或() 2. 采用在中指定的地址与服务端的建立连接 3. 为该指定一个,并把该的侦听端口返回给 4. 采用返回的端口与指定的建立连接,并与断开连接,这之后与 之间的通讯通过进行处理,与无关。 5. ()或()调用返回。 本地客户端与远程客户端的主要区别 1. 本地客户端只能用语言或语言编写,远程客户端可以用几乎所有的编程语言编 写。 2. 在远程客户端所在的机器上要安装的客户端软件,并且在设置相应的环境变量; 在本地客户端上不用 3. 用编译远程客户端程序时要加 –,编译本地客户端则不用 与远程客户端有关的配置: 1. 在中要配置,即最多可以有多少个远程客户端同时连接 到该服务器上。 2. 在中要配置: "" " " 中可带的参数为: "[ ] [] [ ] [ ][ ][ ] [ ][ ][ ] [ ][ ] [ ][ ] [ ] [ ][ ][ ] [ ][{}]" 参数说明: : 的侦听端口,远程客户端通过该端口与服务器建立连接 : 最少启动多少个进程 : 最多启动多少个进程,默认值为 :每个进程可以同时与多少个远程客户端建立连接 如果在远程客户端与服务器之间传送的数据包大小(单位为字节)超过指定的参 数,就自动进行数据压缩, : 指定一个远程客户端的空闲时间,如果该远程客户端在这么长的时间内没有做任何调用,将断开与该远程客户端的连接。单位为分钟,如果没有指点该参数,那么永远不会自动断开远程客户端的连接 : 指定远程客户端与建立连接的时间,如果在指定的时间内还没有建立连接,那么连接将失败。如果没有采用安全认证方式默认为*秒,。如果采用安全认证方式默认为*秒, [ ][ ]:指定可以使用的端口范围: 如果远程客户端要跨越防火墙才能访问该应用系统,在中要指定该参数,指定可以使用的端口范围,并让防火墙允许访问这些端口。如果不指定,会根据系统端口的使用情况进行分配,而分配的端口防火墙不允许通过,造成无法调用 。如下面的设置指定可用的端口范围为 – 。 " " 在远程客户端的机器上要设置的环境变量 (必需):客户端在该机器上的安装目录 (必需):远程客户端通过该地址与服务器建立连接,它的值为参数的值, 如在上面的配置中为: (可选): 该客户端的类型,如果与服务器的类型一样,那么在它们之间进行数据 传送时不用进行编码解码工作。 其他不常用的环境变量可参考的联机文档。 客户端的编程模式: 在层结构中,是属与表示层,表示层主要处理与用户交互,它的功能可概括为: 、提供应用的用户交互接口,即主要通过图形化的用户界面,取的用户的输入数据 、与 应用服务器建立连接 、调用应用服务器上的服务(),把客户端的输入参数放入输出缓冲区。 、应用服务器调用相应的处理客户端的请求,把处理结果通过客户端的输 入缓冲区返回给客户端。 客户端与服务端之间的通讯方式有以下几种: 、同步调用: 、异步调用 、会话方式: 、可靠消息队列 、广播方式 、发布订阅 在下一章我们再具体介绍 的介绍 客户端通过调用提供的编程()来编写程序,下面介绍一些客户端主要的 与连接的建立与断开有关的 为了与 建立连接 要调用()检查该 所采用的安全方式,并根据得到的值做相应的处理,然后调用()建立与的连接,在 的结果返回 之后,调用()断开与 的连接. () 描述: 检查该 所采用的安全方式 参数:无 返回值: :不需要认证 :需要口令认证 :需要口令认证,并且还需要应用级的认证或授权. :调用失败, 错误号保存在全局变量中。 ( *) 描述: 与 建立连接 参数 返回值: 失败返回, 错误号保存在全局变量中。 结构体在中的定义如下 { []; * * []; * * []; * * []; * * ; * * ; * * ; * * }; ; 说明用于安全认证中 :用于定义以何种方式通知该客户端一个 的到来.它的值可以为: () 描述: 断开与 建立连接 参数:无 返回值: 失败返回, 错误号保存在全局变量中。 与请求 有关的 ( *, *, , **, *, ) 描述:客户端同步调用服务端的名为的, 参数: *:的名称 *: 输入缓冲区的地址,客户端传给服务端的参数放在该缓冲区内 : 输入缓冲区的长度 ** 输出缓冲区的地址,服务端传给客户端的结果放在该缓冲区内 *:输出缓冲区的长度 : 调用标志,由以下几个: 如果调用的客户端当前在方式下,那么不参与当前的。 如果服务端返回的缓冲区类型与客户端定义的缓冲区()类型不一致,默认情况下,会转换成与服务端返回的缓冲区类型一致的类型,如果设置了该,那么当出现这种情况时,不进行缓冲区类型转换,并且会保错。 默认情况下,如果客户端有阻塞条件存在(如的中的缓冲区满,磁盘忙等),那么客户端会阻塞在那里,直到阻塞消除或超时出错。如果设置了,当客户端有阻塞条件存在时()会立刻返回并报错. 注意只对发送请求时起作用,如果在接收服务端返回的结果时有阻塞条件存在,客户端会在那里等待,直到阻塞消除或超时出错 如果客户端有阻塞条件存在,客户端会一直阻塞在那里,即使到了超时时间也不返回,但如果该客户端是在模式下,当到了 事务的超时时间,还是会报超时错误并返回。 如果在进行系统调用时,被信号中断,该系统调用会重新进行。 调用成功返回,失败返回, 错误号保存在全局变量中。 ( *, *, , ) 描述: 客户端异步调用服务端的名为的,不等服务端返回结果,程序可继续往 下走,在某个地方调用()取的服务端的返回 参数: *, *, 参数的含义与()中的一样 可设置为:, , , . , , 的含义与与()中的一样 :调用()的客户端不想接收端的应答。如果设置了 :服务端不会给该客户端发送应答。 返回值: 失败返回,成功返回一个,可作为的参数,用于取应答 ( *, **, *, ) 描述:取出服务端对()的应答。 参数: ()返回的 **返回缓冲区的地址,服务端传给客户端的结果放在该缓冲区内 *:返回缓冲区的长度 :可以是:, ,(不管的值,从服务 器的应答队列中取第一个可用的消息), 返回值: 失败返回,错误号保存在全局变量中。 ( ) 描述: 如果当前的程序不处于事务模式中,取消对()的应答, 如果处于事务模式 中,则不能取消对()的应答,该调用会失败. 参数: ()返回的 返回值: 失败返回,错误号保存在全局变量中。 () 描述:返回最近发送(()())或接收(())的一个消息的优先级 参数:无 返回值: 消息的优先级,值越高, 优先级越高 失败返回, 错误号保存在全局变量中。 { ; * * ; * * } []; (; <; ) { * * [] (, , , ); * * [] (); } * () * ((*) , , ([]), ); (; < ; ) { ([], , , ); } ( , ) 描述: 设置下一个要发送的消息的优先级 参数: 为相对值, 设置下一个要发送的消息的优先级为现在的优先级加上 : 为绝对值, 设置下一个要发送的消息的优先级为 返回值: 失败返回,错误号保存在全局变量中。 与请求错误处理有关的 *( ) 描述:返回错误号为的错误描述 参数: :在中定义的全局变量,用于标识错误号,类似于中的 返回值: 失败返回,成功返回错误号为的错误描述. ( ) 描述: 返回当前进程或线程最近调用的出错的更详细的描述 参数:设为 返回值: 如果没有错误返回,有错误返回错误描述号 * ( , ) 描述: 返回错误描述号的详细描述信息 参数: : ()的返回值, : 设为 返回值: 失败返回,成功返回详细描述信息 采用语言编写的客户端程序 如果是采用语言编写的客户端程序,可直接采用的函数,这些函数在中定义.采用语言编写的客户端的例子在此不列举,可参考等例子.采用语言编写客户端的编译是用命令进行的,它的使用格式如下: [] [] [{ }] [ ] [ ] [ ] 参数说明: : 编译用写的客户端 : 输出详细的编译信息 : 编译成 ,如果不带该参数,那么将编译成 . : 编译生成的可执行文件名 : 要编译的文件名 : 指定要编译生成该可执行文件名要连接的其他库文件,如果有多个库文件要连接,它们之间用空格隔开. : 指定该要连接的 调用或编译器来进行编译工作.所以客户端所在的机器要有编译器才能编译客户端的程序. 如果是客户端,可安装,并在环境下编译客户端的程序. 如果在安装时没有把自动设置环境变量的选项选上,中设置环境变量的文件在安装目录下的\\中,可手工执行它或在设置环境变量的文件中用调用它,如: :\\\\ :\ :\\ \ \ \ 如果是客户端,可安装等或编译器.并在环境变量中设置所用的编译器路径. 采用编写客户端程序 采用编写客户端程序与采用语言编写客户端的方式一样,但要对要进行一些设置才能进行编译,说明如下: 1. 在下的 中加上,如图所示: 2. 在下的 中选 ,然后加上的目录,如图所示: . 在下的 中选 ,然后加上的目录,如图所示: 采用编写客户端程序 . 函数的声明 对,,,等客户端,提供一个编程接口,该文件名为,首先要在这些语言中声明所要用到的函数。因为中没有指针,我们把它们声明为型。如果是双重指针,可声明为 . 下面声明采用编写段程序常用到的函数 ( ) "" ( ) "" ( , , ) "" ( , ) "" ( , ) "" ( , , , , , ) "" ( ) "" ( ) "" ( ) "" ( ) "" ( , ) "" ( , , , ) "" ( , , , ) "" ( , , , , ) "" () "" ( ) "" ( , , , , ) "" ( , , , , ) "" ( , , , , ) "" ( , ) "" ( , ) "" ( , , ) "" ( ) "" ( ) "" "" ( ) "" "" ( , ) "" ( ) "" ( , , , , ) "" ( , , , , ) "" . ()缓冲区的定义 在中缓冲区中字段的在*文件中定义,在中可以把它们定义为常量 .编程方式的改变 在两层的结构中,客户端直接访问数据库,当采用中间件后,形成三层结构。这时,客户端不直接访问数据库,而是改为调用中间件服务端上的服务,由服务端访问数据库,并把结果返回给客户端。所以这时候客户端上不用安装数据库的客户端,中的数据窗口的数据源也只能采用外部数据源。因为不能直接与数据库建立连接. .对存储过程的处理 推荐的做法是把存储过程转换为 的,这样做工作量比较大,但是完全的层结构,另一种方式是存储过程不变,用一个 的去调用该存储过程,把结果返回给客户端. .例子 下面我们举两个例子来说明在中编写客户端程序的方法. 为了方便在例子中调用,我们重新定义对缓冲区进行操作的函数如下: ( ) *作用:写一个浮点型数据到缓冲区的指定位置中 输入参数: : 缓冲区 : 号 : 位置 : 要写入的浮点型数据 输入参数:无 返回值: 成功,失败 * (); () () ( "(" () ")出错: "()) ( ) *作用:写一个整型数据到缓冲区的指定位置中 输入参数: : 缓冲区 : 号 : 位置 : 要写入的整型数据 输入参数:无 返回值: 成功,失败 * (); () () ( "(" () ")出错: "()) ( ) *作用:写一个字符型数据到缓冲区的指定位置中 输入参数: : 缓冲区 : 号 : 位置 : 要写入的字符型数据 输入参数:无 返回值: 成功,失败返回相应的 * () () () ( "(" () ")出错: "()) ( , ) *作用:从缓冲区的指定位置中取浮点型数据到输入参数中 输入参数: : 缓冲区 : 号 : 位置 : 取出的数据储存到中 输入参数:无 返回值: 成功,失败 * (, , , , ) () ( "(" () ")出错: "()) ( , ) *作用:从缓冲区的指定位置中取整型数据到输入参数中 输入参数: : 缓冲区 : 号 : 位置 : 取出的数据储存到中 输入参数:无 返回值: 成功,失败 *
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服