ソケット通信でわかない事があります。
クライアントとサーバーをCONNECTするのにIPアドレスとポート番号が必要と思うのですが、この時、ポート番号は何番でも良いのでしょうか?
あるシステムでサーバー側に指定されているポート番号ではなくてもCONNECTが出来てしまいます。あるデータフォーマットでサーバー側を制御するのですが、この時CONNECTが出来たポート番号を使うと応答が帰ってきません。
ここを参照してはどうでしょうか?
http://www.mm-labo.com/computer/tcpip/ipaddress/portsort.html
参考にします。
解決済みのようですが、少し補足させてもらいますね。
クライアントとサーバを接続する場合、一般にはIPアドレスで接続先のコンピュータを指定します。
そして、ポート番号で利用するサービスを指定しますね。
最近はセキュリティの関係で、ポート番号を使って自由に通信させてもらえなくなってきていて、分かりにくくなってますよね?
非常に簡単に考えると、ポート番号は「アプリケーション」の指定なんです。
ローカルだとメモ帳を実行するときに「notepad.exe」のようにファイル名で起動しますよね?
これがネットワークの場合、「80番」のように番号を指定してサービスを要求します。
「80番」が要求された→80番はWebサービス→Webサーバ(アプリケーション)が応答する
という流れですね。
このポート番号について、よく使われる番号が決められているのは、deldelさんが紹介してくれたページで説明されていますね。
でも、決められた番号を他の用途に使えない、ということではないので、勝手に使うこともできます。
でるでるさんが出会った次の現象は
> あるシステムでサーバー側に指定されているポート番号ではなくてもCONNECTが出来てしまいます。
指定したポート番号でたまたま他のサービスが受け入れ待ちをしていたためだと思います。
サーバ側ではポート番号で指定されたサービス(アプリケーション)が誰かに呼ばれたから「お、9928番が呼ばれた。私のことですね?なーに?」のように返事をしたんですね。
接続できたら、次はコンピュータ同士で会話を始めるのですが、そのときはルールに従ってコマンドをやり取りします。
このルールを「プロトコル」と言うそうで、有名なポート番号で使うプロトコルは決まっているそうです。
でるでるさんが出会った次の現象の場合、
> あるデータフォーマットでサーバー側を制御するのですが、この時CONNECTが出来たポート番号を使うと応答が帰ってきません。
サーバ側のデータフォーマットが違っていたので、意思疎通ができないんだと思います。
「なーに?」と返事はしたものの、返されたメッセージが例えばロシア語で、理解できないでいるそんな感じでしょうか・・?
またはクライアント側が返答をしないので、待ちつづけているだけかもしれません。
ポート番号がアプリケーションと対応していますので、これは自然なことなんですね。
指定されているポート番号で接続して、指定されたデータフォーマットで試せば、きっと期待通り動くと思いますよ。
ツイート | ![]() |