[FAQ/設定編/IBM i] 通信の設定

通信方法の特徴について

TCP/IP 接続の特徴

  • 通信速度が速い
  • IBM i 側で事前にサーバープログラムの起動が必要

IBM i の子プロセスのジョブ名はどのようにして決まるか?

PCクライアントが起動すると、それに応じて IBM i サーバー側でも
子プロセスJOBが起動されて PCクライアントと会話を始めます。

このJOB名は次のように命名されています。

TCP/IP の場合
Spool ライターの「通信の設定」で登録した「PC ロケーション名」です。

サーバーの開始/終了

サーバーはIBM i 内で待機してTCP/IP通信のPCとの会話を始めて PCの要求を処理します。

サーバーの開始はTCP/IP通信の最も基本的な機能です。

サーバー・デーモンが待機していることの確認

サーバー・デーモンが正しく開始された待機中であることは

WRKACTJOB + (実行キー)

によって SPOOLW_EGN が TIMW として待機しているかどうかで確認することができます。

JOB : SPLWTR_SVR, SPOOLW_EGN はサブ・システム SPOOLWTR の配下で待機します。
Spoolライターの各メニューで「F5= 活動状況」を押すとサブ・システム SPOOLWTR だけの
活動状況(WRKACTJOB) を参照することができます。
下記はその様子を現しています。

LPRライターもサブ・システム SPOOLWTR の配下で活動します。

サーバー・デーモンを毎日、自動開始させるには?

PC クライアントと IBM i のTCP/IP接続が正常に行なわれていても、毎日の IBM i の IPL 後に
STRTCPSTRSPLSVR の2つのコマンドを手動で実行するのは面倒な作業です。
すでに TCP/IP を日常的に使用している IBM i ユーザーであれば
何らかの方法を講じていると思われますが、参考例として 2 つの方法をご紹介します。

【方法1】STRSPLSVR をジョブ・スケジュールする。

コマンド STRSPLSVR + F4 キー によってプロンプト表示させます。

パラメーターのうち、SBMJOB スケジュールの開始日が *CURRENT のときは直ちにジョブが開始されますが、
*WEEKLY を設定して開始時刻を指定しておけば、月曜から金曜までの指定した時刻に
サーバージョブを起動させることができます。

一旦、STRSPLSVR を *WEEKLY で開始させてしまえば、
以降の日に STRSPLSVRを実行する必要はありません。
しかし、操作員が誤って待機中の STRSPLSVR を取消した場合には、
改めて STRSPLSVR を実行しなければなりません。

【方法2】スタートアップ PGM に組込む

CL の知識があることが前提
次に説明する内容については、CL プログラムの知識を充分お持ちの方が、
しかも注意深く行なっていただく必要があります。

コマンド入力画面において、

DSPSYSVAL QSTRUPPGM + 実行キー

により、システム値の始動プログラムとして登録されているのが
QSYS ライブラリーの中の QSTRUP であることがわかります。
QSTRUP の中に STRTCP や STRPNLSVR を組込むことによって、
自動でサーバーを起動することができます。

次にご説明するのは、始動プログラム QSTRUP の中にSTRTCP や STRSPLSVR を組み込む方法です。
その手順は以下の通りです。

  1. CLプログラム:QSYS / QSTRUP の CL原始を取り出す。

    RTVCLSRC(原始CL検索)コマンドを次のように使ってCL原始を取り出します。

    RTVCLSRC PGM(QSYS/QSTRUP) SRCFILE(QGPL/QCLSRC)

    既存の CL プログラムの原始も RTVCLSRC=*YES であれば、
    この方法で失われた CL 原始を復元することができます。

  2. SEU によってQSTRUPのCL原始を修正する。

    STRSEU QGPL/QCLSRC QSTRUP + 実行キー

    SEU を起動し、最後の 「RETURN」 命令の直前に、次の 2行を追加します。

      STRTCP 
      SPOOLWTR/STRSPLSVR

    「 F3=終了 」 で原始を保管します。

  3. QSTRUPをコンパイルする。

    CRTCLPGM QGPL/QSTRUP SRCFILE(QGPL/QDDSSRC) AUT(*ALL)

    でプログラム:QSTRUP をライブラリー QGPL に作成します。

  4. システム値 : QSTRUPPGM を修正する。

    WRKSYSVAL QSTRUPPGM + 実行キー によって

    
     始動プログラム . . . . . . . :   QSTRUP 
       ライブラリー . . . . . . . :     QGPL 
    						

    のように、ライブラリーを QSYS から QGPL へ変更してください。

このように、元の QSYS の QSTRUP を変更することなく
QGPL に新しく作成した QSTRUP に指定を変える方法であれば、
問題が生じたときにはいつでも QSYS/QSTRUP に戻すことができます。

スタート・アップ(QSTRUP)の使い方

OS/400 のスタート・アップ・プログラムは QSTRUP という名前で登録されています。
コマンド DSPSYSVAL QSTRUPPGM + (実行キー) によって


                                システム値表示                    
                                                                  
 システム値 . . . . . . :   QSTRUPPGM                             
 記述 . . . . . . . . . :    始動プログラム                       
                                                                  
                                                                  
 始動プログラム . . . . . . . :   QSTRUP         名前, *NONE     
   ライブラリー . . . . . . . :     QSYS         名前             
			

のように表示されます。
ここで、コマンド :

RTVCLSRC QSYS/QSTRUP SRCFILE(QGL/QCLSRC)

を実行すれば、スタート・アップ・プログラム QSYS/QSTRUP のソースが ライブラリー QGPL のソース・ファイル QCLSRC, メンバー QSTRUPとして 取得することができます。

次は STRSEU QGPL/QCLSRC QSTRUP で SEU 実行時の QSTRUP の内容の一例です。

----------------------------------------------------------------------------------
0001.00 /********************************************************************/
0002.00 /*                                                                  */
0003.00 /* 5763SS1 V3R2M0 960517     RTVCLSRC 出力       99/05/27 14:11:33  */
0004.00 /*                                                                  */
0005.00 /*  プログラム名  . . . . . . . . . . . . . :   QSTRUP            PN*/
0006.00 /*  ライブラリー名  . . . . . . . . . . . . :   QSYS              PL*/
0007.00 /*  元の原始ファイル  . . . . . . . . . . . :                     SN*/
0008.00 /*  ライブラリー名  . . . . . . . . . . . . :                     SL*/
0009.00 /*  元の原始メンバー  . . . . . . . . . . . :                     SM*/
0010.00 /*  原始ファイル変更                                                */
0011.00 /*    日付/時刻  . . . . . . . . . . . . . :                     SC*/
0012.00 /*  パッチ・オプション  . . . . . . . . . . :   *NOPATCH          PO*/
0013.00 /*  ユーザー・プロファイル  . . . . . . . . :   *USER             UP*/
0014.00 /*  テキスト  :                                                   TX*/
0015.00 /*  所有者  . . . . . . . . . . . . . . . . :   QSYS              OW*/
0016.00 /*  パッチ変更 ID . . . . . . . . . . . . . :                     PC*/
0017.00 /*  パッチ APAR ID. . . . . . . . . . . . . :                     PA*/
0018.00 /*  ユーザー変更フラグ  . . . . . . . . . . :   *NO               UM*/
0019.00 /*                                                                ED*/
0020.00 /********************************************************************/
0021.00      PGM                                                              
0022.00      DCL VAR(&STRWTRS) TYPE(*CHAR) LEN(1)                             
0023.00      DCL VAR(&CTLSBSD) TYPE(*CHAR) LEN(20)                            
0024.00      DCL VAR(&CPYR) TYPE(*CHAR) LEN(90) VALUE('5763-SS1 (C) COPYRIGHT-
0025.00  IBM CORP 1980, 1994. LICENSED MATERIAL - PROGRAM PROPERTY OF IBM')   
0026.00      QSYS/STRSBS SBSD(QSPL)                                           
0027.00      MONMSG MSGID(CPF0000)                                            
0028.00      QSYS/RLSJOBQ JOBQ(QGPL/QS36MRT)                                  
0029.00      MONMSG MSGID(CPF0000)                                            
0030.00      QSYS/RLSJOBQ JOBQ(QGPL/QS36EVOKE)                                
0031.00      MONMSG MSGID(CPF0000)                                            
0032.00      QSYS/STRSBS SBSD(QSNADS)                                         
0033.00      MONMSG MSGID(CPF0000)                                            
0034.00      QSYS/STRSBS SBSD(ENGLISH) /* ENGLISH SBS START BY QTR */         
0035.00      MONMSG MSGID(CPF0000)                                            
0036.00      QSYS/STRCLNUP                                                    
0037.00      MONMSG MSGID(CPF0000)                                            
0038.00      QSYS/RTVSYSVAL SYSVAL(QSTRPRTWTR) RTNVAR(&STRWTRS)               
0039.00      IF COND(&STRWTRS = '0') THEN(GOTO CMDLBL(NOWTRS))                
0040.00      QSYS/STRPRTWTR DEV(*ALL)                                         
0041.00      MONMSG MSGID(CPF0000)                                            
0042.00 NOWTRS:                                                               
0043.00      QSYS/RTVSYSVAL SYSVAL(QCTLSBSD) RTNVAR(&CTLSBSD)                 
0044.00      IF COND((&CTLSBSD *NE 'QCTL      QSYS      ') *AND (&CTLSBSD *NE-
0045.00  'QCTL      QGPL      ')) THEN(GOTO CMDLBL(DONE))                     
0046.00      QSYS/STRSBS SBSD(QINTER)                                         
0047.00      MONMSG MSGID(CPF0000)                                            
0048.00      QSYS/STRSBS SBSD(QBATCH)                                         
0049.00      MONMSG MSGID(CPF0000)                                            
0050.00      QSYS/STRSBS SBSD(QCMN)                                           
0051.00      MONMSG MSGID(CPF0000)                                            
0052.00      QSYS/STRSBS SBSD(QSERVER)                                        
0053.00      MONMSG MSGID(CPF0000)                                            
0054.00 DONE:                                                                 
0055.00      QSYS/STRTCP                                                      
0056.00      MONMSG MSGID(CPF0000)                                            
0057.00      QGPL/STRPNLSVR                                                   
0058.00      MONMSG MSGID(CPF0000)                                            
0059.00      SPOOLWTR/STRSPLSVR                                               
0060.00      MONMSG MSGID(CPF0000)                                            
0061.00      STRSBS     SBSD(ASNET.COM/ENTPRSSVR)                             
0062.00              ASNET.COM/STRHSTSVR TCPIP(*YES 3008)                     
0063.00              STRTCPSVR  SERVER(*HTTP)               
0064.00              DLYJOB     DLY(60)                     
0065.00              ASNET.COM/STRHTPSVR TCPIP(*YES 3009)   
0066.00      RETURN                                         
0067.00      CHGVAR VAR(&CPYR) VALUE(&CPYR)                 
0068.00      ENDPGM                                         
-----------------------------------------------------------------------------------------

重要な追加部分は DONEタグの後ろの

0055.00      QSYS/STRTCP
0056.00      MONMSG MSGID(CPF0000)

0059.00      SPOOLWTR/STRSPLSVR
0060.00      MONMSG MSGID(CPF0000)

です。
前者は TCP/IP の開始をOS/400 に指示しています。
後者の部分は STRSPLSVR によって Spool ライターのサーバー・デーモンを開始しています。

特に注意が必要であるのは OS/400 V5R1M0 以降です。
V5R1M0 以降では TCP/IP は OS/400によって自動開始されるからといっても
QSTRUP 内部による STRTCP コマンドの実行は必要となります。 なぜなら V5R1M0 以降の TCP/IP の自動開始は、この QSTRUP が実行した後で実行されるからです。
ここに STRSPLSVR を登録しておいても、STRSPLSVR が実行される時点では
TCP/IP はまだ開始されていないことになります。
従ってサーバー・デーモンは SOCKET を作成出来ない旨のエラーとなってしまいます。
このことを避けるにはやはり V5R1M0 以降といえども明示的な
STRTCP による TCP/IPの 開始が必要となってきます。

QSTRUP のコンパイル

上記のような STRTCP と STRSPLSVR の登録が完了すれば

CRTCLPGM QGPL/QSTRUP SRCFILE(QGPL/QCLSRC) AUT(*ALL)

のようにしてコンパイルします。 コンパイルは QSYS にオブジェクトを作成しているのではなく、QGPL に作成していることに注意してください。
将来のOS/400のリリース・アップのことを考慮するのであれば、
システム・ライブラリーである QSYS にユーザー・オブジェクトを作成すべきではありません。

OS/400に多少精通してきても QSYS や IBM によって提供されて導入されている
オブジェクトを変更したり除去したりすると予想できない結果を生じます。
Spool ライター だけでなく多くのソフトウェア製品は IBM提供のオブジェクトを
前提としている場合がありますので、IBM提供のオブジェクトやスプール・ファイルを
絶対に除去したり移動しないでください。

SYSVAL の変更

次に WRKSYSVAL QSTRUPPGM によって
QSYS/QSTRUP として登録されているスタート・アップ をQGPL/QSTRUPに変更します。

STRSPLSVR でエラーになったら?

STRSPLSVR を実行してエラーになるのは多くの場合が ジョブ投入(ADDJOBSCDE) に失敗する場合です。
この原因として考えられるのは、

  • TCP/IP が事前に開始されていない。
  • ADDJOBSCDE に必要な権限が無い。

のどちらかです。
OS/400 V5R1M0 で注意しなければならないのは、
V5R1M0 からは TCP/IP は意図的に開始させなくても OS/400によって 内部で自動開始されますが、
実際に実行されるのは QSTRUP の後になります。

従って QSTRUP で STRSPLSVR を使用している場合は、
QSTRUP の中に STRSPLSVR が実行される前に、STRTCP も実行を指定する必要があります。

サーバー・デーモンや子プロセスを
バッチ・ジョブとして開始させるには?

Spool ライター のサーバー・デーモンや子プロセスJOBは省略値では
対話式JOBとして実行されます。

他のJOBへの影響を懸念して、これらをバッチ・ジョブとして開始させたい場合は、
バッチ・ジョブのジョブ待ち行列へ投入されるように変更する必要があります。

コマンド WRKJOBQ + (実行) すると


                        すべてのジョブ待ち行列の処理                          
                                                                              
オプションを入力して,実行キーを押してください。                              
  3= 保留   4= 削除   5= 処理   6= 解放   8= ジョブ・スケジュール項目の処理   
  14= 消去                                                                    
                                                                              
OPT      待ち行列      ライブラリー         ジョブ     サブシステム         状況         
        QS36EVOKE      QGPL                0     QBASE           RLS          
        QS36MRT        QGPL                0     QBASE           RLS          
        QTXTSRCH       QGPL                0     QBATCH          RLS          
        QBASE          QGPL_PRV            0                     RLS          
        QBATCH         QGPL_PRV            0                     RLS          
        QFNC           QGPL_PRV            0                     RLS          
        QINTER         QGPL_PRV            0                     RLS          
        QPGMR          QGPL_PRV            0                     RLS          
        QSNADS         QGPL_PRV            0                     RLS          
        QSPL           QGPL_PRV            0                     RLS          
        QS36EVOKE      QGPL_PRV            0                     RLS          
        QS36MRT        QGPL_PRV            0                     RLS          
                                                                      続く ...
コマンド                                                                      
===>                                                                          
F3= 終了   F4=プロンプト   F5= 最新表示   F12= 取消し   F24= キーの続き          
			

のような画面が表示されます。
今、この画面でわかるようにサブ・システム QBATCH で実行させたいのであれば、
投入すべきジョブ待ち行列は QGPL/QTXTSRCH であることがわかります。

そこで SPOOLWTR/STRSPLSVR + (F4キー)を押して、
さらに(F10キー)を押して


                  追加のパラメーター                                         
                                                                             
 ジョブ記述  . . . . . . . . . .   *USRPRF        名前 , *USRPRF             
   ライブラリー  . . . . . . . .                  名前 , *LIBL, *CURLIB      
 ジョブ待ち行列  . . . . . . . .   QINTER         名前 , *JOBD           
   ライブラリー  . . . . . . . .     QGPL         名前 , *LIBL, *CURLIB  
 メッセージ待ち行列  . . . . . .   *SYSOPR        名前 , *USRPRF, *SYSOPR
   ライブラリー  . . . . . . . .                  名前 , *LIBL, *CURLIB  
 開始ジョブのジョブ待ち行列  . .   QINTER         名前 , *JOBD           
   ライブラリー  . . . . . . . .     QGPL         名前 , *LIBL, *CURLIB  
			

で表示される「ジョブ待ち行列」に QGPL/QTXTSRCH を指定すれば
サーバー・デーモンは QBATCH で実行されます。
また「開始ジョブのジョブ待ち行列」 に QGPL/QTXTSRCH を指定すれば
子プロセスJOB は QBATCH で実行されます。

SNDFTPでは IBM i のFTPを開始させておく必要があるか?

SNDFTP は FTPクライアント ですので、IBM i のFTPを起動させておく必要はありません。
相手側サーバーのFTPサーバーは起動させておく必要があります。

SNDFTPでPCサーバーではなくPCにもダウンロードさせるには?

Win2000サーバーやLinux などが導入されているPCサーバーであれば FTPサーバーも導入されていて既に活動中である場合が多く、 従って問題なくSNDFTPによって送信することができます。

※ 図は既にFTPサーバーが稼動しているWindows2000サーバー機の
インターネット・インフォメーション・サービス(IIS)の管理画面

しかし、Win2000 PRO(クライアント) の場合 は初期導入時には
FTPサーバーは 導入されていません。
このことを確認するには

[マイ コンピュータ]-[コントロール・パネル]-[管理ツール]の「サービス」

を起動してみてください。

Win2000サーバーの場合は FTPが開始されていますが、
Win2000 PROの場合には FTPが無いことが わかります。

Win2000サーバーの「サービス」画面

Win2000 PRO の「サービス」画面

SNDFTP を使ってFTPでWin2000クライアントにデータを送信するには
Win2000クライアントにも 追加でWindows のFTPを導入する必要があります。
その手順は次の通りです。

[マイ コンピュータ]-[コントロール・パネル]
-[アプリケーションの追加と削除]
-[Windowsコンポーネントの追加と削除]

より「インターネット・インフォメーション・サービス(IIS)」の項目を選択し、
[詳細] より「FTPサービス」を明示的に選択します。
その後はウィザードに従って操作します。

IBM i をインターネットに接続するには ?

IBM i に対して構内LAN やインターネットから IBM i をアクセスする例はいくらでもある。
IBM i に対してグローバル IP アドレスを割り振れば、その IBM i に対して
インターネット経由でアクセスすることができるようになる。
ここでの話題は、そうではなく IBM i 自らがインターネットへ出て行くための
設定について紹介することである。
あなたの PC がインターネットに接続して多くのサイトを閲覧するのと同じように
IBM i 自身もまた、多くのサイトに接続することができるような設定のことである。
IBM i からインターネットへ接続するには IBM i に対してグローバル IP を
割り振るような設定は必要ではない。

あなたの PC がブラウザによってインターネットに接続するためには、
どのような設定をしたのであろうか ?
恐らくは、まずプロバイダーと契約してプロバイターに接続するためのルーターを
社内の窓口として設定して社内の各PCは、そのルーター兼DNSサーバーに接続しているはずである。
これと同じ設定が IBM i でも必要となってくる。

最初に社内の DNSサーバーの IP アドレスを調べてみよう。
あなたの Windows の TCP/IPネットワークのプロパティを調べれば簡単に自分が接続している
DNSサーバーの IPアドレスを調べることができる。

次に 5250 エミュレータで CFGTCP + [実行] で 「2. TCP/IP経路の処理」を選択する。
次のように

 
 *DFTROUTE  *NONE  ( DNSサーバーの IPアドレス)   (この IBM i の IPアドレス)
			

を登録する。

さらに「12.TCP/IPドメイン情報の変更」を選択してホスト名検索優先順位を
*LOCAL から *REMOTE に変更して IPアドレスに DNS サーバーの IPアドレスを登録する。

以上で設定は完了である。
インターネットに接続可能であるかを検索するには、どこかのサイトに PING を飛ばして
反応があれば接続できたことになる。
例えば、コマンド入力画面で

 
 PING WWW.OFFICEQUATTRO.COM +[実行]
			

と実行することで接続を確認することができる。

【参考】

IBM i 自身からインターネットへ接続することは、次の意味において重要な意味を持つ。
IBM i がネット接続できるということはネット経由で様々な情報を取得したり、
ネット経由での通信が可能となることである。
例えば、

  • ネット経由で注文データを取得する。
  • ネット経由で Webサービスを利用する。
  • 自社の分散されたネットワークをネットで結合する。
  • ネット経由で銀行や取引先とのデータ交換を行う。

ということが簡単に可能となる。
弊社の場合は PTF の取得である。
ユーザーは自社に導入されている製品のオプションを選択するだけで
簡単に弊社がPTFを公開しているサイトへ接続して最新のPTFを入手して
適用することができる。
今までのように弊社の HP から PTF をダウンロードして解凍して
IBM i にアップロードする必要はないのである。
直接、ユーザーの IBM i がネット接続して PTF をダウンロードして
適用まで自動的に行ってくれるのである。
いわばボタンひとつで Windows Update を行うのと良く似ている。
これによってユーザーは PTF の順序や操作に間違うようなことは全く無くなり、
しかも安全でスピーディである。
PTF の適用サービスを皮切りとして今後は益々Webサービスが積極的に
利用される範囲は広がっていくであろう。