第11章  ILE−RPGならソケット通信可能なはず?
RPGプログラマーの為のC言語講座

AS/400では、ソケットをサポートする言語は、C言語となっています。

C言語でソケットをサポートする以前(V3.05)は、パスカル言語でのみサポートしてましたが、 ソケットAPIは独自の仕様となってました。

OS/400バージョン3.1以降サポートされた、C−SOKCETは、BSD sokcet 互換として実装されました。
内容は、一部の関数のパラメーターの解釈の差異ぐらいで、主な sokcet 関数については、違いを意識することはほとんどないほど 同じです。
BSD UNIX 互換なので当然、C言語をベースとしての実装です。RPGなどの従来の言語などの考慮はなされていません。(たぶん)

RPGもその後の ILE-RPG として非常に大きく機能拡張されています。

現在のILE−RPGなら、ソケット関数を利用して通信可能なはずです。

ここでは、システムで提供されている、C-SOCKET関数をILE-RPGから呼び出すのにトライしてみましょう。

(注)もちろん、メーカーのサポート対象外の内容になります。

メーカーサポートなどに問合わせた場合は、当然、C言語のみ利用可能という答えが帰ってくるでしょう。 だって、マニュアルには、そう書いてあるんだら......それが正しい回答でよね。

問題は、Cの場合は、socket.hというヘッダーファイルに関数のプロトタイプや構造体など の定義があらかじめなされていますが、ILE−RPGには、socket.hに相当するものがありません。 ということは、socket.hを見ながら、ILE−RPG用に定義を作成する必要があります。

今回は取りあえず、Sockst RPGの時に作成した、SOKRPGCAプログラムを元に、 ILE−RPGで作成し直してみました。

この SOKRPGCA は、TCP接続のクライアント側のサンプルプログラムです。 対となるサーバー側のプログラムは、SOKRPGSVR です。 今回は、SOKRPGSVR は、SOKRPGの物をそのまま利用しました。

SOKRPGCAで使用していたソケットプログラム、


SKOPEN,SKCONN,SKSEND,SKREAD,SKCLOS を、それぞれ
SOCKET,CONNET,SEND,RECV,CLOSE に置き換えました。

画面ファイル SOKCAFM
ILE−RPG SOKRPGCAE
OPM−RPG SOKRPGCA
ILE−C SOKRPGCAC

注)CRTBNDRPGするときは、DFTACTGRP は *NO にして下さい。

まだ、エラー処理とか、他のパターンなど改良の必要はあるものの、取りあえず問題なく動作しました。

今後、さらに時間をかければ、ILE−RPG用の <SOCKET.H> も作成可能でしょう!

そうしておけば、/COPYを使用して、ILE-RPGでもソケットが簡単に利用出来るようになりますね。


[CLab MAIN PAGE]