ソケット通信について

解決


でるでる  2006-03-14 20:13:18  No: 20500  IP: 192.*.*.*

ソケット通信でわかない事があります。
クライアントとサーバーをCONNECTするのにIPアドレスとポート番号が必要と思うのですが、この時、ポート番号は何番でも良いのでしょうか?
あるシステムでサーバー側に指定されているポート番号ではなくてもCONNECTが出来てしまいます。あるデータフォーマットでサーバー側を制御するのですが、この時CONNECTが出来たポート番号を使うと応答が帰ってきません。

編集 削除
deldel  2006-03-15 09:01:53  No: 20501  IP: 192.*.*.*

ここを参照してはどうでしょうか?

http://www.mm-labo.com/computer/tcpip/ipaddress/portsort.html

編集 削除
でるでる  2006-03-16 11:33:15  No: 20502  IP: 192.*.*.*

参考にします。

編集 削除
デル太  2006-03-20 23:46:15  No: 20503  IP: 192.*.*.*

解決済みのようですが、少し補足させてもらいますね。

クライアントとサーバを接続する場合、一般にはIPアドレスで接続先のコンピュータを指定します。
そして、ポート番号で利用するサービスを指定しますね。

最近はセキュリティの関係で、ポート番号を使って自由に通信させてもらえなくなってきていて、分かりにくくなってますよね?

非常に簡単に考えると、ポート番号は「アプリケーション」の指定なんです。
ローカルだとメモ帳を実行するときに「notepad.exe」のようにファイル名で起動しますよね?
これがネットワークの場合、「80番」のように番号を指定してサービスを要求します。

  「80番」が要求された→80番はWebサービス→Webサーバ(アプリケーション)が応答する

という流れですね。

このポート番号について、よく使われる番号が決められているのは、deldelさんが紹介してくれたページで説明されていますね。

でも、決められた番号を他の用途に使えない、ということではないので、勝手に使うこともできます。
でるでるさんが出会った次の現象は

> あるシステムでサーバー側に指定されているポート番号ではなくてもCONNECTが出来てしまいます。

指定したポート番号でたまたま他のサービスが受け入れ待ちをしていたためだと思います。
サーバ側ではポート番号で指定されたサービス(アプリケーション)が誰かに呼ばれたから「お、9928番が呼ばれた。私のことですね?なーに?」のように返事をしたんですね。

接続できたら、次はコンピュータ同士で会話を始めるのですが、そのときはルールに従ってコマンドをやり取りします。
このルールを「プロトコル」と言うそうで、有名なポート番号で使うプロトコルは決まっているそうです。

でるでるさんが出会った次の現象の場合、

> あるデータフォーマットでサーバー側を制御するのですが、この時CONNECTが出来たポート番号を使うと応答が帰ってきません。

サーバ側のデータフォーマットが違っていたので、意思疎通ができないんだと思います。
「なーに?」と返事はしたものの、返されたメッセージが例えばロシア語で、理解できないでいるそんな感じでしょうか・・?
またはクライアント側が返答をしないので、待ちつづけているだけかもしれません。

ポート番号がアプリケーションと対応していますので、これは自然なことなんですね。
指定されているポート番号で接続して、指定されたデータフォーマットで試せば、きっと期待通り動くと思いますよ。

編集 削除