TCP通信概要フロー


サーバーRPG クライアントRPG

1.SKOPEN

SKOPENプログラムによりソケットをオープンします。SKOPENでは、setsocketオプションで、 TCP_NODELAY,SO_REUSEADDRをセットしています。

1.SKOPEN

SKOPENプログラムによりソケットをオープンします。SKOPENでは、setsocketオプションで、 TCP_NODELAY,SO_REUSEADDRをセットしています。

2.SKBIND

SKBINDプログラムによりソケットにIPアドレス/ポート番号を割り当てます。 SKBINDでは、明示的なIP割り当ての代わりにANYとしてどのインターフェースからの 接続要求についても受けとれります。

3.SKLISN

SKLISNプログラムにより、クライアントからの接続要求を待ちます。
<=====

4.SKCONN

SKCONNプログラムにより、サーバーに接続を行います。IPアドレスは、 構内ループバックアドレス(127.0.0.1)を指定しているので、サーバーと同じマシン上で クライアントも実行すると仮定しています。

5.SKACPT

SKACPTプログラムにより、クライアントからの接続要求を受け入れます。
この際に、新しいソケットディスクリプターがシステムにより与えられます。これ以降の通信は ここで割り当てられた新しいディスクリプターを使用します。

<=====

6.SKCLOS

SKCLOSプログラムにより、最初に作成したlisten用のソケットディスクリプターをクローズします。
通常のtcpipサーバーは、接続要求を受けたあとの処理は、子プロセスを作成し、個別の通信はその子プロセスに ませるようにするのが一般的です。
しかし、RPGでは、子プロセスやスレッド処理をサポートしないため、ここでは、別のプログラムが新たに そのポートでlisten出来るように、ソケットをクローズしています。

7.SKRECV

SKRECVプログラムにより、クライアントから送信された文字列を受信し、画面表示します。
<=====

7.SKSEND

SKSENDプログラムにより、画面から入力された文字列を送信します。

8.SKSEND

SKSENDプログラムにより、7.でクライアントから受信した文字列をそのまま送信します。
(エコー処理)
<=====

8.SKRECV

SKRECVプログラムにより、サーバーから送信された文字列を受信し、画面表示します。
(エコー処理)

9.SKCLOS

文字列[EXIT]が送られてきた場合は、SKCLOSプログラムにより、ソケットのクローズを行います。

9.SKCLOS

画面からF3が押されるか、サーバープログラムが終了した場合は、SKCLOSプログラムにより、ソケットのクローズを行います。

[Return]