• ベストアンサー

クライアントサーバ型アプリ製造時のポート番号は?

初心者的質問で申し訳ありません。 クライアントサーバ型のアプリケーションを製造するとき、サーバ側のプログラムに固定のポート番号を割り当てないと、通信ができないですよね? 例えば、40000にしよう!と決めたとして、サーバPCは、40000=(製造した)サーバプログラムというのをどうやって認識するのでしょうか?サーバPC側での定義をするのですか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

OSに関係なくソケットプログラミングをしたい場合は、やはりJavaでしょうか? JavaでHello World > ソケット編 http://www.hellohiro.com/socket.htm 上記のサイト内にもある通り、「◆サーバー側ソースコード」の所で、ServerSocketクラスのインスタンスを生成する際に、コンストラクタの引数指定で、ポート番号をそのまま利用していますね。(「// サーバーソケットの生成」のすぐ下の部分。) JavaのServerSocketクラスに関して、もっと詳しい情報が知りたい場合は、以下のAPIリファレンスを参考にしてください。 java.net クラス ServerSocket http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/index.html?java/net/ServerSocket.html

batucada
質問者

お礼

おお! javaなんかだと「ソケットの生成」というスクリプトがあるってことですね! 私のケースはjavaではありませんが、言語によってはプログラム側から能動的にソケットを決定できる、ということがわかりさえすれば、今抱えている問題は解決です。 どうもありがとうございました。

その他の回答 (2)

  • notnot
  • ベストアンサー率47% (4848/10261)
回答No.2

サーバープログラム中で指定します。二通りやり方があって、 ・固定で4000とコード中に書く ・サービス名を決め、/etc/services に番号との対応を書いて getservbynameでサービス名からポート番号に変換します 後者であれば/etc/servicesのファイル編集だけで番号を変更できます。 Windowsの場合はファイルやサブルーチン名が異なるでしょうが、基本的には同じです。

batucada
質問者

お礼

WindowsもWINDOWS\SYSTEM32\DRIVERS\ETCにservicesファイルがあってウェルノウンポートの番号が書いてありますね。ここにサーバプログラムのサービス名とポート番号を追記するイメージかしら? ともあれキーワードをいただいたので調べられそうです。 ありがとうございます。

noname#39970
noname#39970
回答No.1

クライアントプログラム というのがあるのは判るだろうか それに対し 当然サーバプログラム というのもある。 サーバプログラムは特定のポートからの通信を見張り、待機しているような物が殆ど。 一番判りやすく有名なのがapacheとTCP80。 対してクライアントは各種ブラウザ(あれもhttpでアクセスはTCP80)

batucada
質問者

補足

ありがとうございます。 サーバプログラム自身がサーバPCに入っているTCPまたはUDP パケットを見ていて、自分のポート番号宛のパケットが来たら 取り込む、という動きをしているということでしょうか?

関連するQ&A

  • クライアントPCでの使用ポート番号について

    NWのポート番号について調べていたところ 「ウェルノウンポート番号 (0~1023)はサーバのアプリケーションに割り当てられ、動的・プライベート ポート番号 (49152~65535)はサーバとのプロセスに応じクライアントのアプリケーションに動的に割り当てられます。」と記述してありました。 そこでUDP68番ポート(IPアドレス払い出しのクライアント側用)についてご教示ください。 68番ポートはウェルノウンポート番号にあたるのでサーバーのみが 使用し、クライアントPCは動的・プライベート ポート番号を使用すると認識しているのですが、ウェルノウンポート番号はクライアント側でも使用するのでしょうか?

  • サーバからクライアントにポート番号を指定する方法

    java初心者です。 現在javaを使ってサーバとクライアントのsocketプログラムを作っています。 動作としてはサーバ側がクライアントに対して接続するポートを指定し、以後クライアントがサーバに対して通信を行う際には指定されたポート番号を使って通信を行うような動作をさせたいのですがうまくいきません。 そのため、みなさんの知恵を拝借したいのですが、アドバイス等頂けないでしょうか。 また、javaでは実現不可能だとするのでしたら、その理由も詳しく教えていただけると幸いです。 どうぞよろしくお願いします。

    • ベストアンサー
    • Java
  • クライアント側のポート番号

    ネットワークの勉強を始めたばかりの者です。 ポート番号に関する本で、HTTPポートに関して次のように書いてありました。 「HTTPポートは、WebブラウザでWebページを閲覧するときに使用される「HTTPプロトコル」を用いて通信を行う際にデータが通過するポートです。 HTTPプロトコルでは、通信の際だけ80番のHTTPポートを開き、通信が完了するとポートは閉じます。 例えば、あるWebページをWebブラウザに表示するにあたり、表示されるまでは、そのWebページのデータを受信している状態なので80番ポートは開いていますが、Webページデータを完全に受信し終わり、Webブラウザに表示されたら80番ポートは閉じます。 つまり、一回の通信毎に80番ポートを開けたり閉じたりを繰り返しています。」 私は、変だと思いました。 私は、クライアント側のポート番号は、その場で適当な番号が割り当てられるものだと思っているからです。 上の引用の中で、80番というWell-Knownポートで受信しているという話は解せなのです。 どう読んでも、上記の引用部分はクライアント側の話なのです。 (サーバ側はクライアント側(ブラウザ)からいつ要求されるかわからないから、「開けたり閉じたり」ということはないと思うのです。) http://www.mm-labo.com/computer/tcpip/ipaddress/portsort.html このページにも、「クライアント側で使用するポート番号は各OSが動的に割り当てる」と書いてあります。 私がしている勘違いはなんでしょうか。

  • サーバプロセスとクライアントプロセスの通信

    サーバプロセスとクライアントプロセスの通信がどのように行われているのか確認させてください。 現在、以下の認識でいます。 (1)TCPコネクション  サーバ側ポート番号【23】と、それぞれのクライアント側ポート番号【****】との間に確立する。   (2)通信処理  クライアント側のプロセスAは、サーバ側のプロセスA(子)  クライアント側のプロセスBは、サーバ側のプロセスB(子)  クライアント側のプロセスCは、サーバ側のプロセスC(子)  との間で通信を行う。 ※添付の図も参照ください。 認識に相違ないでしょうか。 サーバプロセスとクライアントプロセスの通信を行う際、プロセス間(ポート間?)の通信には、IPアドレスとポート番号を組み合わせたソケットを用いるため、サーバ側ではソケット【192.168.0.1:23】を1個作成し、クライアント側ではソケット【192.168.0.2:****】をプロセス分作成すると考えています。 このとき、クライアントプロセスAはサーバプロセスA(子)と通信を行いますが、サーバ側で作成されているソケットは1つであるため、どの子プロセスに対してデータをせばいいのか判別できないのではないかと考えています。 ※クライアントプロセス(A、B、C)はソケット(サーバ側)【192.168.0.1:23】に対して送信されるため。 上記について、何らかの仕組みがあるのでしょうか。 よろしくお願いします。

  • TCP/IP通信型プログラムです。 サーバのポート番号をクライアントが

    TCP/IP通信型プログラムです。 サーバのポート番号をクライアントが取得するプログラムで、 while(1) { saddr.sin_port=htons(port); port++; fprintf(stdout, "%d\n", port); } のようなのをプログラムのどこに入れれば よいのでしょうか?

  • プロキシサーバのポート番号について

    LAN内のPC1からプロキシサーバを経由して外部のPC2にアクセスする場合について疑問があります。 PC1とプロキシサーバ間の通信で使用するポート番号は、あらかじめ決めておけば良いのですが、プロキシサーバとPC2間の通信で使用するポート番号はどのように決まるのでしょうか? 1.PC1がプロキシサーバにアクセスした時のポート番号を使用する 2.PC1がプロキシサーバに使用するポート番号を通知している 3.プロキシサーバにあらかじめ設定しておいたポート番号を使用している 4.その他 申し訳ありませんが、ご存知の方、教えて頂けないでしょうか? お願い致します。

  • ポート番号について

    ポート番号について 私は今通信ゲームを開発しているんですが 一方のPCがサーバーソフトを起動してそれに通信して サーバーとクライアントでやりたいなと思っているのですが ポート開放がわからない人でもできるようにしたいんですがここで質問です 必ず開いているポートはありまあせんか? なぜ1024番以下のポートは使用しないほうがいいんでしょうか? 80や110番のポートにソケットをたてそれを使って通信したらだめでしょうか だめならなぜでしょうか?

  • Winsockでクライアントのポート番号を設定したいです

    環境はWin2000,VC++6.0,MFC,ダイアログベースです Winsockではサーバ側のポート番号を指定しますよね。 クライアント側のポート番号を設定したいのですができますでしょうか? acceptされるポート番号を一定にしなくてはならない状況なのでよろしくお願いします。

  • クライアント側のポート番号を指定しての通信

    クライアント側で、自身のポート番号を指定して通信したい場合どうすれば良いですか?

  • ポート番号

    ポート番号についてわからないことがあり教えていただきたいことが あります。 ポート番号はアプリケーションごとに 割り当てられる、といったあたりまでは個人で調べたのですが、 細かい処理がわかりません。 Webサーバーなどのほうでは通常デーモン?などが待機しており、それ らが割り当てられたポート番号ならば処理を受け付ける、ということ になると思うのですが、クライアント側、通常の家庭用パソコンの 方にアクセスした(された)場合、どういった処理になるので しょうか。Windows環境ではバックでどういったプロセスが走って いるのかあまり詳しくありません。 たとえばブラウザを起動していない状態でHTTPポート宛のデータ を送りつけられた場合そのデータは破棄されるのでしょうか。 それとも勝手に対応するアプリケーションが起動され、処理される のでしょうか。また、Telnetなど、が勝手に起動してデータを 受け取る、といったことはあるのでしょうか。 クライアントの方ではポート番号は動的に決定される、といった ことは調べたのですが、基本的にこちらからの要求に対応する パケット以外は処理されない、といった形になっているのでしょうか? 以上のあたりが疑問として残ってしまっています。 どうか詳しい方、宜しくお願いいたします。

専門家に質問してみよう