はじめに
日本語プログラミング言語Mindの小技「コネクション確立」について説明したいと思います。
対象読者
日本語プログラミング言語Mindのユーザー、または日本語プログラミング言語に興味のある方
この小技に関連するMind言語マニュアル
この小技に関連するMind言語仕様の記述はMind8プログラミングマニュアルに記載はありません。
Mind7の付属の上級者向けドキュメントmind7\doc\socketlib.docmに記載があります。
2-2 処理単語解説(ソケット)
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
■コネクション確立・サーバ側
--------------------------------
<ホスト名> <ポート番号> コネクション確立・サーバ側
→ ソケット
--------------------------------
前記した、「listen」と「accept」のコンビネーションです。
単一コネクション(1ポート対1ポート)で良いのであればこちらが便利です。
リターンした時、LISTENソケットは既にクローズされており表には見えません。
エラーリターンが有ります。戻ったら必ずエラーを調べてください。■コネクション確立・クライアント側
--------------------------------
<ホスト名> <ポート番号> コネクション確立・クライアント側
→ ソケット
--------------------------------
connectの別名です。「コネクション確立・サーバ側」との命名のバランス
上、設けてあるだけです。
エラーリターンが有ります。戻ったら必ずエラーを調べてください。
本機能(本記事)は、下記のバージョンに対応しています。Mind8/9にもソケットライブラリはありますが、若干仕様が異なっているので本記事では検証を行っておりません。(別記事でご解説)
対応バージョン
■Mind7 □Mind8 □Mind9
■Windows版 □Linux版
小技の解説
Mindの小技「コネクション確立」は、Mindのソケット通信ライブラリ機能で1対1のコネクションを確立する機能です。
サーバ側の「コネクション確立・サーバ側」とクライアント側の「コネクション確立・クライアント側」があります。
「コネクション確立・サーバ側」と「コネクション確立・クライアント側」の単語はソケット通信のサーバー側とクライアント側で1対1の通信確立する手順をいい感じで抽象化していましたが、Mind8以降はこれらの単語の内部で使っている「listen」「accept」「connect」に集約され、これらの単語は廃止されました。
本記事ではシンプルなサンプルとしてサーバ側「コネクション確立・サーバ側」とクライアント側「コネクション確立・クライアント側」で通信確立し、クライアント側で入力した文字列をおうむ返しする処理を実装します。
ソケット通信の概念をつかみやすくるため、ホスト名やポート番号は固定書きの超シンプル版です。
Mindプログラムソース
サーバー側
サンプルホスト名は 文字列定数 "localhost"。
サンプルポート番号は 数値 1000。
コネクション確立とは (ホスト名、ポート番号 → ソケット)
ソケットは 変数
(ホスト名と ポート番号で)
コネクション確立・サーバ側し ソケットに 入れ
エラー?
ならば エラー文字列で 重大エラー
つぎに
ソケットをかえす。
サーバー側ソケット通信とは (ソケット → ・)
ソケットは 変数
受信文字列は 文字列
送信文字列は 文字列
ソケットに 入れ
ここから
ソケットから ハンドル指定で一行読み出し 受信文字列に 入れ
データ終り?
ならば 「クライアントの終了を検知しました。」を 一行表示し
打ち切り
つぎに
「受信データ=」を 表示し 受信文字列を 一行表示し
送信文字列に 受信文字列を 入れ
送信文字列を ソケットに ハンドル指定で一行書き込み
繰り返し。
メインとは (・ → ・)
ソケットは 変数
「ソケット通信サーバー側を起動しました。クライアントからの接続を待機しています。」を
一行表示し
サンプルホスト名と サンプルポート番号で
コネクション確立し ソケットに 入れ
「クライアントとの接続を確立しました。クライアントからの送信を待機しています。」を
一行表示し
ソケットで サーバー側ソケット通信し
ソケットを ハンドル指定でクローズし
「ソケット通信サーバー側を終了しました。」を 一行表示すること。
クライアント側
サンプルホスト名は 文字列定数 "localhost"。
サンプルポート番号は 数値 1000。
コネクション確立とは (ホスト名、ポート番号 → ソケット)
ソケットは 変数
受信文字列は 文字列
送信文字列は 文字列
(ホスト名と ポート番号で)
コネクション確立・クライアント側し ソケットに 入れ
エラー?
ならば エラー文字列で 重大エラー
つぎに
ソケットをかえす。
クライアント側ソケット通信とは (ソケット → ・)
ソケットは 変数
受信文字列は 文字列
送信文字列は 文字列
ソケットに 入れ
ここから
文字列入力し 送信文字列に 入れ
送信文字列が 空列?
ならば 打ち切り
つぎに
送信文字列を ソケットに ハンドル指定で一行書き込み
ソケットから ハンドル指定で一行読み出し 受信文字列に 入れ
データ終り?
ならば 「サーバーの終了を検知しました。」を 一行表示し
打ち切り
つぎに
「受信データ=」を 表示し 受信文字列を 一行表示し
繰り返し。
メインとは (・ → ・)
ソケットは 変数
サンプルホスト名と サンプルポート番号で
コネクション確立し ソケットに 入れ
「ソケット通信クライアント側を起動しました。何か入力してください。(Enterで終了)」を
一行表示し
ソケットで クライアント側ソケット通信し
ソケットを ハンドル指定でクローズし
「ソケット通信クライアント側を終了しました。」を 一行表示すること。
コンパイル結果
ではコンパイルしてみます。下位ライブラリはsocketlibを指定します。
Mind7
C:\developments\vscode\mind9>mind socketsrv socketlib
日本語プログラミング言語 Mind Version 7.5 for Windows
Copyright(C) 1985-2004 Scripts Lab. Inc.
Single user license. Serial No:********
コンパイル中 - 終了
Coping.. C:\mind7\bin\mindexec.exe -> socketsrv.exe
C:\developments\vscode\mind9>mind socketclt socketlib
日本語プログラミング言語 Mind Version 7.5 for Windows
Copyright(C) 1985-2004 Scripts Lab. Inc.
Single user license. Serial No:********
コンパイル中 - 終了
Coping.. C:\mind7\bin\mindexec.exe -> socketclt.exe
Mind8
参考にMind8の場合です。Mind9βも同様です。
c:\developments\vscode\mind9>mind socketsrv socketlib
日本語プログラミング言語 Mind Version 8.07 for Windows
Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了
1 個のエラーが有ります。
c:\developments\vscode\mind9>mind socketclt socketlib
日本語プログラミング言語 Mind Version 8.07 for Windows
Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了
1 個のエラーが有ります。
socketsrv.src 9 行目でエラー。行内容は、
コネクション確立・サーバ側し ソケットに 入れ
要因1:"コネクション確立・サーバ側"は未定義の単語です。
1 個のエラーが有ります。
socketclt.src 12 行目でエラー。行内容は、
コネクション確立・クライアント側し ソケットに 入れ
要因1:"コネクション確立・クライアント側"は未定義の単語です。
1 個のエラーが有ります。
実行結果
つづいて実行してみます。Mind7の結果です。
コマンドプロンプトターミナルは2つ起動します。
最初にサーバーを起動します。
c:\developments\vscode\mind9>socketsrv
ソケット通信サーバー側を起動しました。クライアントからの接続を待機しています。
これは起動しただけで、「コネクション確立・サーバ側」はまだ実行していません。
つづいてクライアント側を起動します。
C:\developments\vscode\mind9>socketclt
ソケット通信クライアント側を起動しました。何か入力してください。(Enterで終了)
このとき、サーバー側では「コネクション確立・サーバ側」の実行が完了して、下記のように接続確立のメッセージが表示されます。
c:\developments\vscode\mind9>socketsrv
ソケット通信サーバー側を起動しました。クライアントからの接続を待機しています。
クライアントとの接続を確立しました。クライアントからの送信を待機しています。
クライアント側でコンソールからメッセージを入力します。下図はEnterキー押下前です。
C:\developments\vscode\mind9>socketclt
ソケット通信クライアント側を起動しました。何か入力してください。(Enterで終了)
こんにちは。
クライアント側でEnterキー押下すると、サーバーがメッセージをおうむ返ししてきます。
C:\developments\vscode\mind9>socketclt
ソケット通信クライアント側を起動しました。何か入力してください。(Enterで終了)
こんにちは。
受信データ=こんにちは。
サーバー側もメッセージを受信したことがわかります。
c:\developments\vscode\mind9>socketsrv
ソケット通信サーバー側を起動しました。クライアントからの接続を待機しています。
クライアントとの接続を確立しました。クライアントからの送信を待機しています。
受信データ=こんにちは。
クライアント側でEnterキーのみ押下して終了します。
C:\developments\vscode\mind9>socketclt
ソケット通信クライアント側を起動しました。何か入力してください。(Enterで終了)
こんにちは。
受信データ=こんにちは。
ソケット通信クライアント側を終了しました。
C:\developments\vscode\mind9>
サーバー側も終了したことがわかります。
c:\developments\vscode\mind9>socketsrv
ソケット通信サーバー側を起動しました。クライアントからの接続を待機しています。
クライアントとの接続を確立しました。クライアントからの送信を待機しています。
受信データ=こんにちは。
クライアントの終了を検知しました。
ソケット通信サーバー側を終了しました。
c:\developments\vscode\mind9>
いかがでしょうか?1対1のソケット通信で、コネクション確立、ソケット通信、終了のステップのイメージがつかめれば幸いです。
参考情報
この小技「コネクション確立」を使った記述例の記事は未発見です。
おわりに
いかがでしたでしょうか?なにかの参考になれば幸いです。2025年は日本語プログラミング言語Mind生誕40周年です。
本記事シリーズのご紹介
本記事シリーズ「日本語プログラミング言語Mindの小技」は「日本語プログラミング言語Mind生誕40周年プロジェクト」の一環です。
興味を持たれた方は日本語プログラミング言語Mind公式サイトにアクセスすると、Mindコンパイラをダウンロードできますよ。
面白い!、楽しい、カンタン、難しいのも書ける!みんなでやってみよう![]()