TXSeries入门系列文章18

a.使用ctgstart

语法

ctgstart [-port=<port number on which the gateway daemon will listen>]

如果命令中没有指定端口号,网关守护进程将监听CTG配置文件中定义的端口。

如果一切正常,终端会显示类似下列这样的信息:


现在网关守护进程正在作为前台任务运行,终端应该保持现状并等待来自客户端的连接,直到键入”Q“或”I“来关闭网关守护进程。

参阅:

http://www-01.ibm.com/support/knowledgecenter/SSZHFX_9.1.0/operating/topics/ctgstartref.html?lang=en

b.使用ctgd

如果不需要监控来自客户端的连接,推荐使用”ctgd“命令。运行这条命令前,首先创建”ctgd“的配置文件(默认为/opt/ibm/cicstg/bin/ctgd.conf)。方便起见,本单元示例中执行”touch /opt/ibm/cicstg/bin/ctgd.conf“来创建一个空文件。

语法

ctgd start | stop

ctgd“将使用CTG配置文件中的信息,例如网关守护进程将监听的端口。

参阅:

http://www-01.ibm.com/support/knowledgecenter/SSZHFX_9.1.0/operating/topics/unixservice.html?lang=en

http://www-01.ibm.com/support/knowledgecenter/SSZHFX_9.1.0/operating/topics/ctgdref.html?lang=en

4. ECI编程

完成了CTG配置后,客户端的non-CICS应用程序可以连接到CICS服务器,并通过CICS提供的ECI APIs与服务器上的应用程序通信。

1)什么是ECI

外部调用接口(ECI)使得运行在客户端机器上的non-CICS应用程序可以调用运行在CICS服务器中的CICS应用程序。客户端应用程序通过使用名为COMMAREA的数据区域与CICS服务器程序通信,在连接中COMMAREA会被传递给CICS region

针对C语言有两种版本的ECI——ECI v1ECI v2。注意,C语言的ECI v1只支持本地模式,同时ECI v2只支持远程模式。JavaECI同时支持本地模式和远程模式。

参阅:

关于ECI

http://www-01.ibm.com/support/knowledgecenter/SSAL2T_8.1.0/com.ibm.cics.tx.doc/concepts/c_ext_call_intrface.html?lang=en

关于API、模式和协议:

http://www-01.ibm.com/support/knowledgecenter/SSZHFX_8.1.0/ctgunx/which_api.html?lang=en

2)什么是COMMAREA

通信区域(COMMAREA)是一个可以被客户端应用和服务器程序共享的缓存。客户端和服务器程序都可以读取和修改其中的内容,用以互相传递消息。

3)什么是EIB

运行接口模块(EIB)是一块CICS维护的区域,其中包含诸如终端名称、交易名称、时间和数据等环境信息,还包括异常、响应代码等。例如,首先执行”CICS ADDRESS EIB(dfheiptr) “命令获取EIB的地址,然后就可以在随后的命令末尾添加一个”RESP“选项来获取响应代码以确定命令是否成功执行。

参阅:

关于ADDRESS EIB

http://www-01.ibm.com/support/knowledgecenter/SSAL2T_8.1.0/com.ibm.cics.tx.doc/concepts/c_exec_cics_adrs_eib.html?lang=en

关于RESP

http://www-01.ibm.com/support/knowledgecenter/SSAL2T_8.1.0/com.ibm.cics.tx.doc/reference/r_resp_resp2.html?lang=en

4)客户端编程

a. C语言本地模式ECI v1

示例文件”/opt/ibm/cicstg/samples/c/eci/ecib1.c“实现了本地模式ECI v1调用。为了学习客户端编程,请用户参照下列内容浏览ecib1.c文件。

在主函数中,程序声明了很多变量(87100行)。请注意以下变量:

progid              客户端应用程序将调用的服务器程序idPD)。

chosenServer  客户端应用程序连接的服务器名称。

EciParms         指向ECI参数块的指针,其中含有连接所需参数,执行外部调用时将被传递到服务器。

CommArea      客户端和服务器程序使用的通信区域。

UserId             用于安全检查,本示例中不可用。

PassWd           用于安全检查,本示例中不可用。

rc                     ECI调用的返回码。

用户需要根据实际情况对一些参数进行修改。例如,如果客户端应用程序将调用一个名为”helloprg“的服务器程序,那么progid必须改为”helloprg“。

参阅:

关于ECI参数:

http://www-01.ibm.com/support/knowledgecenter/SSZHFX_8.1.0/proref/cclamch4.ide2.html?lang=en

参数声明(105137行)后,程序将会获取可使用服务器的列表,并需要用户选择一个服务器进行连接。除了这种方式,用户也可以通过修改”chosenServer“的值去指定一个服务器进行连接。

然后在随后两行(142143行),使用”\0“清除CommAreaEciParms的内容。如果用户想向服务器程序传递一些消息,可以在清除CommArea的内容后再向其中放入要传递的消息。

现在ECI参数的所有内容已经设置完成(145155行),可以运行ECI调用(160行)了。同时,commarea可能被服务器程序修改,所以最后程序从commarea复制内容并打印到终端(161166行)。

上面是示例中使用本地模式ECI v1调用的所有指令。用户可以参考”/opt/ibm/cicstg/samples/c/eci/samp.mak“和”/opt/ibm/cicstg/samples/c/env_c.def“,或者查看本单元练习的答案。

b. C语言远程模式ECI v2

C语言本地模式ECI v1相比,ECI v2的参数是很相似的,但是除了ECI参数外,ECI请求也需要网关令牌来完成ECI调用。用户可以打开并参考示例文件”/opt/ibm/cicstg/c/eci_v2/ctgecib1.c“,下面是学习时需要注意的行号的列表。

113118行:   声明网关令牌,设置CTG主机名称(地址)和网关守护进程监听的端口号。

180行:             打开远程网关连接并获得网关令牌。

339行:             列出有效的服务器和网关令牌。

201289行:   使用网关令牌执行ECI v2来调用服务器程序”EC01“并传递commarea,然后从commarea获取服务器程序的响应。

303行:             关闭网关连接。

目录”/opt/ibm/cicstg/samples“中可以查看不同语言的更多示例。

5)服务器端编程

服务器端编程更加简单。为了响应客户端应用程序,服务器仅需要获得commarea的地址,并向其中放入响应消息,然后运行”CICS RETURN“命令,之后客户端将会获得服务器的响应。TXSeries程序可以通过下列命令获得commarea的地址并将其放入指定的指针:

语法

CICS ADDRESS COMMAREA(<pointer of commarea>)

选项

<pointer of commarea>         commarea的指针,通常是”char*“类型指针。

<response code>                     命令的响应码,通常是”long“类型变量。

然后服务器程序可以通过这个指针获取来自客户端应用的消息,并通过修改commarea中的内容响应客户端应用请求。服务器程序完成所有的逻辑后,不要忘记运行”CICS RETURN“命令。

5. 参阅

关于CTG

http://blog.csdn.net/s04023083/article/details/7259922

6. 练习

1)修改ECI v1示例源代码,客户端应用发送消息:”Hello, I am client!“,服务器程序响应:”Receive: Hello, I am client! Response: Hello, I am server!“。

2)修改ECI v2示例源代码, 客户端应用发送消息:”Hello, I am client!“,服务器程序响应:”Receive:Hello, I am client! Response:Hello, I am server!“。

以下文章点击率最高

Loading…

     

如果这文章对你有帮助,请扫左上角微信支付-支付宝,给于打赏,以助博客运营