# TCP/IP

ひまわりで、TCP/IPを使って、チャットソフトなどの通信ソフトを作りましょう！

TCP/IPって何？

> 米国防総省の資金援助によるネットワークプロジェクトDARPANET（Defense Advanced Research Project Agency Network）で開発されたネットワークプロトコルです。80年代のはじめから急速に普及が進み、Internetの標準のプロトコルです。

命令の一覧

> ひまわりでは、TCP/IPを使ったサーバーと、それに繋げるクライアントを作ることが出来ます。
> 以下に命令を列挙します。

> TCP/IP
> TCPポート |  | TCP/IPのポート番号s | -1
> TCPサービス名 |  | TCP/IPのサービス名s | -1
> TCP文字列 |  | TCP/IPで受信した文字列s | -1
> TCP送信元 |  | TCP/IPでメッセージを送信したコンピューターのIPアドレスs | -1
> TCP接続 | ?へ | サーバー(IPアドレスまたはホスト名)?へTCP/IP接続する | 356
> TCP切断 |  | TCP/IP接続を切断する | 357
> TCP接続状態 |  | TCP/IP接続の接続状態を得る | 358
> TCP送信 | ?を | 接続中のサーバーへ文字列?を送信する | 359
> TCP受信処理設定 | ?に | クライアントより文字列を受信した時の処理を、ラベル?に設定する。 | 360
> TCPサーバー起動 |  | TCP/IPサーバーを起動する | 361
> TCPサーバー終了 |  | TCP/IPサーバーを終了する | 362
> TCPサーバー接続先列挙 |  | TCP/IPサーバーに接続しているコンピューターの『IPアドレス,名前』を列挙し、それに返す | 363
> TCPサーバーから送信 | ?へ,?を | サーバーに接続している?(名前)へ、文字列?を、送信する | 364
> TCPサーバー受信処理設定 | ?に | クライアントより文字列を受信した時の処理を、ラベル?に設定する。受信した文字列は、変数『TCP文字列』にある。 | 365

簡単なサンプル

> 以下は、簡単なTCP／IP通信ソフトです。
> ネットワーク環境に接続して、サーバー側と、クライアント側を、１つずつ立ち上げてみてください。
> クライアントの、接続先には、サーバー側のコンピューターのIPアドレス（または、コンピューター名）を入力し、「接続」ボタンを押します。もし、ここでエラーが発生しなければ、メッセージを書いて、「送信」ボタンを押すと、サーバー側の受信メモ部品に、メッセージが表示されます。

> サーバー側
> 母艦の、タイトルは、「サーバー」 受信メモを、メモとして、作成。 その、サイズは、(0,0,400,300) TCPポート=10000 TCPサーバー起動。 受信ラベルに、TCPサーバー受信処理設定 待機。 ＊受信ラベル ホスト=TCP送信元 ホストの、「,」までを、切り取る。 受信メモは、受信メモ&ホスト&「>」&TCP文字列&「\n」 待機。
> クライアント側
> 母艦の、タイトルは、「クライアント」 「接続先」と、表示。 接続先エディタを、エディタとして、作成。 接続ボタンを、ボタンとして、作成。 その、イベントは、接続処理 「送信する内容」と、表示。 送信エディタを、エディタとして、作成。 送信ボタンを、ボタンとして、作成。 その、イベントは、送信処理 その、有効=オフ 待機。 ＊接続処理 TCPポート=10000 接続先エディタへ、TCP接続。 送信ボタンの、有効＝オン 待機。 ＊送信処理 送信エディタを、TCP送信。 待機。

各命令の解説

> 上のサンプルを、見てもらえば、だいたい分かりそうですが、ここでは、くどくどと説明します。

> まず、サーバー側から。

> サーバーを開始するには、

> TCPポート=8000 TCPサーバー起動。

> と、まずポート番号を、指定してから、起動します。このポート番号についてですが、サーバーの種類によって、番号が決まっています。電子メールの送信なら25番、受信が110番、FTPなら21番です。もし独自のネットワークサービスプログラム、例えば自作のゲームなどを作るならこれらの番号以外を選ばなければなりません。
> これだけで、サーバーが起動しました。
> 次に、サーバー側より、何か送られて来た場合の処理を設定します。

> 受信ラベルに、TCPサーバー受信処理設定

> これは、『（ラベルの名前）に、TCPサーバー受信処理設定』と、書きます。
> これで、もし、クライアント側より、何か送信があれば、指定したラベルへジャンプします。この時、受信した内容は、『TCP文字列』に、送信元のIPアドレスとホスト名は、『TCP送信元』に、代入されます。
> 次に、クライアント側です。
> 何はともかく、サーバーに接続しなければ始まりません。

> TCPポート=10000 接続先へ、TCP接続。

> ってな感じで、サーバーに接続します。
> 接続先には、IPアドレスか、ホスト名（ネットワークコンピューター名）を指定します。
> ここで、もし、接続に失敗すれば、エラーメッセージを表示します。
> 接続に成功すれば、以下のようにして、文字列をサーバーへ送信できます。

> 「送信内容」を、TCP送信。

切断処理

> 任意のコンピューターの、サーバー接続をきるときは、『TCPサーバー切断』を使います。

> 母艦の、タイトルは、「サーバー」 受信メモを、メモとして、作成。 その、サイズは、(0,0,400,300) TCPポート=10000 TCPサーバー起動。 受信ラベルに、TCPサーバー受信処理設定 ’切断処理 切断エディタを、エディタとして、作成。 (切断エディタの、右側)に、切断ボタンを、ボタンとして、作成 その、イベントは( もし、切断エディタ<>「」ならば、( 切断エディタの、TCPサーバー切断。 )。 TCPサーバー接続先列挙。 「繋がっているのは、以下のマシンです。\ｎ｛それ｝」と、言う。 )。 待機。 ＊受信ラベル ホスト=TCP送信元 ホストの、「,」までを、切り取る。 受信メモは、受信メモ&ホスト&「>」&TCP文字列&「\n」 待機。

戻る