ソケット通信を勉強する際に便利なこと 

 ソケット通信を勉強する際に便利なこと。
 それは、netstatというコマンドです。


 そもそも、私が習い始めたころ、
 「なぜ接続の際にしてするポートは一つなのに、複数のクライアントと通信できるのか」というのが、
 不思議でした。


 その際に、先輩に教えてもらったのが、netstatした。
 ネットの接続状態が判るんですね。


【動かし方】


 まず、コマンドプロンプトを管理者権限で立ち上げます。
 [アクセサリ]→[コマンドプロンプト]にあります。
 その際、左クリックで起動させずに、右クリックでメニューを出して、管理者で「コマンドプロンプト」を立ち上げます。


 そして、netstat -b などのコマンドを打ち込みます。
(-bを付けるとプログラム名が判ります)


【何が嬉しいか】
 接続されているかが、なんとなく見て判ります。


 一番身近な、ネットワーク接続と言えば・・・ブラウザです。


 ブラウザを立ち上げた後、
netstat -b を打ち込んでみてください。 
 さらに、タブを増やし、どこかHPを見てみてください。
そして、再度コマンド netstat -b を発行してみてください。
(上を押すと再度打ち込まないでいい)

 なんか、項目増えていませんか。

 ブラウザが、WWWサーバとの間にソケットを作った証拠?みたいなもんです。

注意:ブラウザは、ソケットを接続しっぱなしではなく、自動的に切ります。


【マルチクライアント対応のサーバ】
 プログラムの演習で、マルチクライアント対応のサーバを作った際にも、
 コマンド netstat -b を発行してみてください。


 クライアントとの接続が増えるたびに、項目が増えていくと思います。
 そして、切断すると減っていくと思います。


 マルチクライアント対応のサーバの場合。
 最初の接続の際に用いるソケット(ポート?)と、その後の情報のやり取りするためのソケット(ポート?)が違うのが、わかると思います。
(あっているかな?)


 例えば、ポート5050で接続していても、別のポートが増え、実際の通信は、別のポートでやっているが判ります。


 そのため、クライアントを間違えることなくやり取りできるのでした。


 listen とか、acceptとか、シングルクライアントでは、ありがたみが判らないのですが、
 マルチクライアントにしますと、なんとなく判るような気がします。


PS
 OSはPID(プロセスID)で、どのアプリケーションプログラムが、どのポートを使っているか知っています。
 そのため、通信の信号が来たら、それに合わせて、プログラムに処理を投げます。


 そこから先は、それをどう料理するかは、アプリケーションのお仕事です。