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 に置き換えました。
注)CRTBNDRPGするときは、DFTACTGRP は *NO にして下さい。
まだ、エラー処理とか、他のパターンなど改良の必要はあるものの、取りあえず問題なく動作しました。
今後、さらに時間をかければ、ILE−RPG用の <SOCKET.H> も作成可能でしょう!
そうしておけば、/COPYを使用して、ILE-RPGでもソケットが簡単に利用出来るようになりますね。
|
|