6-16-1)メンバー探索

1)メンバー探索は、IPtalk5e12からブロードキャストを使っています。ブロードキャストに対する返事に、パートナーページの「自分のパソコン」の「IPアドレス」を返します。この戻って来たアドレス宛に、通信を行うので、もしこのIPが間違っていると正常に通信できません。この場合、直接、「IPアドレス」に入力する事で、正常に通信できます。

「IPアドレス」を書き換えるたびにアドレスをチェックして、不整なアドレスが検出された場合は「10.14.1.1」に強制的に書き換えてしまいます。これは、書き換えている時に、他のIPtalkからの通信を受信すると、その書き換え途中のアドレスを使って通信しエラーとなる可能性があるからです。挿入削除をうまく使って、IPアドレスの形を維持したまま変更してください。

2)「IPアドレスを教える」のボタンは、4オクテッド目を1から254まで、順番に通信相手を捜して行きます。パケットには、そのIPアドレスがデータとして含まれているため、受信したパソコンは、自分のIPアドレスを知る事ができます。

●「メンバーを捜す」ボタンでやっている事

−−−−−−−−−−−−−−−−−−−−−−−−−
A)<送信元の処理>

まず、自分のIPアドレスからネットワークアドレスを取り出しプロードキャストアドレスを作る。

A−1)そして、そのアドレスのポート6722に「自分のIP,自分ホスト名,"Req"、入力班番号」というデータを入れて投げます。

−−−−−−−−−−−−−−−−−−−−−−−−−−
B)<受信側の処理>6722

受信したIPtalkは、まず同じ入力班かチェックして同じであれば、次の処理をします。

B−1)送信元が、メンバーとして登録されている場合で"Req"だった時は、送信元のポート6718に返事します。
「自分のIP,送信元アドレス,自分のパソコン名、"Ans"」

B−2)送信元が、メンバーとして登録されていない場合は、メンバーの空きを捜します。

 B−2−1)空きが無い場合は、送信元のポート6718に返事します。
「自分アドレス、送信元アドレス、自分のホスト名、"Ful"」

 B−2−2)空きがあった時は、そこにメンバーとして登録して送信元のポート6718に返事します。
      「自分のIP,送信元アドレス,自分のパソコン名、"Ans"」

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
C)<送信元の処理>6718

C−1)返って来たメッセージが"Ful"だった時「この入力力班は満員です。どうしてもこの班に入りたい時は、連絡してください。」と表示します。

"full"で無い場合は、同じ入力班かチェックして、同じであれば、データに埋め込まれていた「送信元アドレス」を「自分のパソコン」の「IPアドレス」に代入した後、次の処理をします。

C−2)返事して来た相手がメンバーに登録されている場合でメッセージが"Req"だったら相手のポート6718に返事します。
「自分のIP,相手アドレス,自分のパソコン名,"Ans"」

C−3)返事して来た相手がメンバーに登録されていない場合空きを捜してメンバー登録して相手のポート6718に返事します。
「自分のIP,相手アドレス,自分のパソコン名,"Ans"」

この通信を受けるのもC)になります。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

●「IPアドレスを教える」ボタンでやっている事。

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
D<送信元の処理>

自分のIPアドレスを分解して、3オクテッド目までを取り出し、4オクテッド目を1から255まで、自分のIP以外のドアレスを組み立てて、6718のポートに次のデータを投げます。
「自分IP,相手アドレス、自分ホスト名,"Req"、入力班」

これの受信処理は、C)です。
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

<メンバー探索と通信>

パートナーページで「メンバーを捜す」ボタンを押した時の「メンバー探索通信」は、同じ入力班のIPtalkを捜して、「メンバー一覧」に表示するだけの機能です。
一方、入力の通信は、「メンバー一覧」に表示されているIPアドレスについて「無批判に」行います。
通常は、「メンバー一覧」に表示されているIPアドレスは、入力班のメンバーですから、入力も同じ入力班のIPtalkに送信するのですが、手入力でIPアドレスを入力したりすると、違う事になります。
「メンバーを捜す」ボタンは、「メンバー一覧」にIPアドレスを表示するための機能である事に注意してください。

チャンネルは通信するポート番号が違うので、IPアドレスがメンバー一覧に入っていても違うチャンネル同士は通信することはできません。