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 v1和ECI v2。注意,C語言的ECI v1只支持本地模式,同時ECI v2只支持遠程模式。Java的ECI同時支持本地模式和遠程模式。
參閱:
關於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文件。
在主函數中,程序聲明了很多變量(87~100行)。請注意以下變量:
progid: 客戶端應用程序將調用的服務器程序id(PD)。
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
參數聲明(105~137行)後,程序將會獲取可使用服務器的列表,並需要用戶選擇一個服務器進行連接。除了這種方式,用戶也可以通過修改”chosenServer“的值去指定一個服務器進行連接。
然後在隨後兩行(142~143行),使用”\0“清除CommArea和EciParms的內容。如果用戶想向服務器程序傳遞一些消息,可以在清除CommArea的內容後再向其中放入要傳遞的消息。
現在ECI參數的所有內容已經設置完成(145~155行),可以運行ECI調用(160行)了。同時,commarea可能被服務器程序修改,所以最後程序從commarea複製內容並打印到終端(161~166行)。
上面是示例中使用本地模式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“,下面是學習時需要注意的行號的列表。
113~118行: 聲明網關令牌,設置CTG主機名稱(地址)和網關守護進程監聽的端口號。
180行: 打開遠程網關連接並獲得網關令牌。
339行: 列出有效的服務器和網關令牌。
201~289行: 使用網關令牌執行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…
