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…

     

如果這文章對你有幫助,請掃左上角微信支付-支付寶,給於打賞,以助博客運營