mindの研究 その49

# 概要
mindが、謎なので調べてみた。
socketのサンプルやってみた。

# 写真


![mind.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/f605ca97-ca77-4990-aaaa-93180040c12e.png)

# サンプルコード

```
通信データは　構造体
　通信文字列は　文字列実体　長さ　１２８
　全体は　通信文字列
。

エラー検査とは
　エラー？
　ならば
　　エラー文字列で　重大エラー
　つぎに
。

メインとは
　ホスト名は　文字列
　ポート番号は　変数
　待ちソケットは　変数
　ソケットは　変数
　打ち切り要求は　変数
　エラー文字列退避は　文字列実体　長さ　エラー文字列長さ
　キー入力有った時の処理とは
　　文字列入力し　通信文字列に　入れ
　　通信文字列が　空列？
　　ならば
　　　打ち切り要求を　セットし
　　　終り
　　つぎに
　　通信データを　ソケットに　ハンドル指定で書き込み
　受信データ有った時の処理とは
　　ソケットと　－１と　通信データへ
　　ハンドルとサイズ指定で構造体に読み出し
　　データ終り？　または　読み出しバイト数が　ゼロ？
　　ならば
　　　「接続が切られました。」を　一行表示し
　　　打ち切り要求を　セットし
　　　終り
　　つぎに
　　「相手から：」を　表示し　通信文字列を　一行表示し
　本体とは
　　「localhost」を　ホスト名に　入れ
　　40001を　ポート番号に　入れ
　　改行し
　　「ホスト名 」を　表示し　ホスト名を　表示し
　　「 、」を　表示し
　　ポート番号を　数値表示し　「 番ポートで待つ。」を　一行表示し
　　ホスト名と　ポート番号と　１個で　ｌｉｓｔｅｎし　待ちソケットに　入れ
　　エラー検査し
　　「ｌｉｓｔｅｎの後」で　このメッセージでスタック検査し
　　「ｌｉｓｔｅｎ完。待ちソケット = 」を　表示し　待ちソケットを　数値表示し　改行し
　　「ａｃｃｅｐｔする」を　一行表示し
　　待ちソケットで　ａｃｃｅｐｔし　ソケットに　入れ
　　エラー？
　　ならば
　　　エラー文字列を　エラー文字列退避に　入れ
　　　待ちソケットを　ハンドル指定でクローズし
　　　エラー文字列退避を　エラー登録し
　　　エラー検査し
　　つぎに
　　「ａｃｃｅｐｔ完。ソケット = 」を　表示し　ソケットを　 数値表示し　改行し
　　「待ちソケットをクローズします」を　一行表示し
　　待ちソケットを　ハンドル指定でクローズし
　　「接続処理の後」で　このメッセージでスタック検査し
　　「接続完。ソケット = 」を　表示し　ソケットを　数値表示し　改行し
　　改行し
　　「キーボードから何か入力すると相手側に送信します」続
　　「(終了はEnterのみ)。」を　一行表示し
　　「相手側から何か受信するとコンソールに表示します。」を　一行表示し
　　改行し
　　打ち切り要求を　クリアし
　　ここから
　　　「ループ内」で　このメッセージでスタック検査し
　　　入力検査フラグ初期化し
　　　０で　入力検査フラグをセットし　（キー入力有り）
　　　ソケットで　入力検査フラグをセットし　（受信データ有り）
　　　０秒で　入力検査し　偽？
　　　ならば
　　　　もう一度
　　　つぎに
　　　（どちらかデータ有り）
　　　０が　入力可能？
　　　ならば
　　　　キー入力有った時の処理し
　　　　打ち切り要求が　真？
　　　　ならば
　　　　　打ち切り
　　　　つぎに
　　　さもなければ
　　　　ソケットで　入力可能？
　　　　ならば
　　　　　受信データ有った時の処理し
　　　　つぎに
　　　つぎに
　　　打ち切り要求が　真？
　　　ならば
　　　　打ち切り
　　　つぎに
　　繰り返し
　　ソケットを　ハンドル指定でクローズし
　　「終わります。」を　一行表示し
　　。





```

```
通信データは　構造体
　通信文字列は　文字列実体　長さ　１２８
　全体は　通信文字列
。

エラー検査とは
　エラー？
　ならば
　　エラー文字列で　重大エラー
　つぎに
。

メインとは
　ホスト名は　文字列
　ポート番号は　変数
　ソケットは　変数
　未接続状態は　変数
　合否は　変数
　打ち切り要求は　変数
　エラー文字列退避は　文字列実体　長さ　エラー文字列長さ
　キー入力有った時の処理とは
　　文字列入力し　通信文字列に　入れ
　　通信文字列が　空列？
　　ならば
　　　打ち切り要求を　セットし
　　　終り
　　つぎに
　　通信データを　ソケットに　ハンドル指定で書き込み
　受信データ有った時の処理とは
　　ソケットと　－１と　通信データへ
　　ハンドルとサイズ指定で構造体に読み出し
　　データ終り？　または　読み出しバイト数が　ゼロ？
　　ならば
　　　「接続が切られました。」を　一行表示し
　　　打ち切り要求を　セットし
　　　終り
　　つぎに
　　「相手から：」を　表示し　通信文字列を　一行表示し
　本体とは
　　「localhost」を　ホスト名に　入れ
　　40001を　ポート番号に　入れ
　　改行し
　　「ホスト名 」を　表示し　ホスト名を　表示し
　　「 に 」を　表示し
　　ポート番号を　数値表示し　「 番ポートで接続。」を　一行表示し
　　ホスト名と　ポート番号で　ｃｏｎｎｅｃｔ・非同期し　ソケットと　未接続状態に　入れ
　　「ｃｏｎｎｅｃｔ・非同期のあと」で　このメッセージでスタック検査し
　　「ソケット=」を　表示し　ソケットを　数値表示し　改行し
　　エラー？
　　ならば
　　　「エラー：」を　表示し　エラー文字列を　一行表示し
　　つぎに
　　未接続状態
　　ならば
　　　「接続完了を待つ」を　一行表示し
　　　ソケットと　１０秒で　接続完了を待ち　偽？
　　　ならば
　　　　「接続失敗」を　一行エラー出力し
　　　　ソケットを　ハンドル指定でクローズし
　　　　「接続処理の後」で　このメッセージでスタック検査し
　　　　終り
　　　つぎに
　　　「接続処理の後」で　このメッセージでスタック検査し
　　　「接続完了。ソケット=」を　表示し　ソケットを　数値表示し　改行し
　　　改行し
　　つぎに
　　「キーボードから何か入力すると相手側に送信します」続
　　「(終了はEnterのみ)。」を　一行表示し
　　「相手側から何か受信するとコンソールに表示します。」を　一行表示し
　　改行し
　　打ち切り要求を　クリアし
　　ここから
　　　「ループ内」で　このメッセージでスタック検査し
　　　入力検査フラグ初期化し
　　　０で　入力検査フラグをセットし　（キー入力有り）
　　　ソケットで　入力検査フラグをセットし　（受信データ有り）
　　　０秒で　入力検査し　偽？
　　　ならば
　　　　もう一度
　　　つぎに
　　　（どちらかデータ有り）
　　　０が　入力可能？
　　　ならば
　　　　キー入力有った時の処理し
　　　　打ち切り要求が　真？
　　　　ならば
　　　　　打ち切り
　　　　つぎに
　　　さもなければ
　　　　ソケットで　入力可能？
　　　　ならば
　　　　　受信データ有った時の処理し
　　　　つぎに
　　　つぎに
　　　打ち切り要求が　真？
　　　ならば
　　　　打ち切り
　　　つぎに
　　繰り返し
　　ソケットを　ハンドル指定でクローズし
　　「メインの終り」で　このメッセージでスタック検査し
　　「終わります。」を　一行表示し
　　。






```

以上。