• ベストアンサー

サーバの機能とソケット

パイプとソケットについてですが、 パイプ:プロセス間のコネクションを設定して行う通信 ソケット:ネットワーク上でコネクションを設定して行う通信 という認識なのですが、これはあってますか? あと、サーバの機能とソケット番号はどのような対応付けが必要なのか教えて下さい。

  • 1025
  • お礼率68% (15/22)

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

  • ベストアンサー
  • MovingWalk
  • ベストアンサー率43% (2233/5098)
回答No.1

アスキー デジタル用語辞典( http://yougo.ascii24.com/ )をご参照ください。 【pipe】 【socket】 参考に下記URLも紹介します。 「プロセス間通信の仕組み」 http://www.linux.or.jp/JF/JFdocs/The-Linux-Kernel-6.html また、サーバの処理(TCPの場合)は、概ね以下のようになります。 ・ソケット1の生成 ・サーバのリッスンポートとソケット1をバインド ・ソケット1をリッスン ・クライアントからコネクトがあると、新しいソケット2でクライアントとの通信を確立 ・この後は、コネクションがあるたびに、新しいソケットでクライアントとの通信を確立 ・ソケット1はサーバを終了する時に閉じ、  ソケット2~はクライアントとの通信を終了する時に閉じる ソケットプログラミングについては以下のURLを参考にしてみてください。 http://www.google.co.jp/search?hl=ja&ie=UTF-8&oe=UTF-8&q=%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF+%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0&lr=lang_ja

参考URL:
http://yougo.ascii24.com/
1025
質問者

お礼

よくわかりました。たすかりました。

その他の回答 (1)

  • Esna
  • ベストアンサー率36% (4/11)
回答No.2

こんにちは.Esnaです. ユーザでソケットによる通信を行う場合,最初にユーザが決めたポート番号を使って(実際には,listen用ポート)コネクションを確立します.通信用ポートは,MovingWalkさんが書かれているように別ポートがオープンされて使われます. ただし,ftpやtelnetなどのサービスようにサーバ,クライアントでポート番号を決めておいて共通して使ったほうが便利なものは,well-known servicesとして,設定されています. ユーザでこれら以外の用途に使う場合は,使われていないポート番号(10000~)とかを使う場合が多いです. well-known servicesは,ファイルに記述されていますが, UNIXであれば, /etc/services Windowsであれば, Windowsディレクトリ配下のどこかにあるservicesファイル(忘れました.ごめんなさい) にポート番号とサービスがセットで記述されています. 探して中身を眺めてみると,いいかも知れません.

1025
質問者

お礼

たすかりました。ありがとうございました。

関連するQ&A

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

    サーバプロセスとクライアントプロセスの通信がどのように行われているのか確認させてください。 現在、以下の認識でいます。 (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】に対して送信されるため。 上記について、何らかの仕組みがあるのでしょうか。 よろしくお願いします。

  • ソケット通信

    現在プロセス間通信について学んでおり、 今はソケットを使ったプロセス間通信のプログラムを書いています。 そのソケット通信での質問なのですが、 2台のパソコンでINETドメインのソケットを使って プログラムを書いているのですが、 サーバーを実行した後、 別のパソコンでサーバー側のパソコンのIPアドレスを指定して クライアントを実行しようとすると、 connect:Connection timedout と表示されて実行できません。 同じプログラムをUNIXドメインで 1台のパソコンで実行すると正しく実行できます。 これは、プログラムに問題があるのでしょうか? それとも、ソケット通信を行う際には 何かパソコン等の設定が必要なのでしょうか? 教えてください。お願いします。 あと、セマフォを用いたプロセス間通信のサンプルプログラムが のっているホームページなどご存知でしたら、 教えていただけるとありがたいです。

  • ソケットを使ったTCP通信

    はじめまして. 最近ネットワークの勉強を始めた学生です. ソケットを使ったTCP通信について質問させてください. クライアント側はsocket(), connect()でコネクションを確立した後に何回か連続してsend(), recv()を行いたいのに,サーバ側がファイアウォールや侵入検知システムを使って途中で通信を終了するようにしてしまっている場合,クライアント側は再びコネクションを確立させなければ全てのsend()を行うことはできないのでしょうか? よろしくお願いします.

  • ソケットの共有について

    プロセスA, プロセスBがあります。 プロセスAの中でスレッドa, スレッドbを作成します。 スレッドaの中でソケットを作成します。 このソケットでプロセスBと通信します。 スレッドbは作成済みのソケットを使ってプロセスBと 通信できますか? ソケットディスクリプタさえ分かれば、実現できるのかな? ちなみに実現可能な場合には何か注意点があったら 教えて下さい。(mutexが必要とか・・・)

  • 異なる言語間でのソケット通信について

    簡単なネットワークプログラムを作成して、ソケット通信の確認をしています。 クライアントとサーバが両方ともにC++の場合と、両方ともにJavaの場合で、正常に通信が行われていることは確認しました。 そこで、クライアントでC++のプログラムを動かし、サーバでJavaのプログラムを動かしてみたのですが、うまくいきませんでした。 (ポート番号を合わせたので、相互接続は出来てるみたいですが、データが渡ってきませんでした。OSはクライアント/サーバともに、Windowsです。) 言語が異なる場合の、ソケット通信について良いサイトをご存知でしたら、教えていただけないでしょうか?

    • ベストアンサー
    • Java
  • Javaのソケット通信について初歩的な質問です

    私はいま、独学でJava言語の勉強をしています。 おそらく初歩的な質問ですが、いくら検索をしても見つからなかったため、質問させていただきます。 JavaでTCPを使ってソケット通信をする際の質問です。 WiFiのアクセスポイントAとアクセスポイントBがあるとします。 クライアントのアプリケーションが、アクセスポイントAからインターネットに接続し、サーバのIPアドレスとポート番号を使ってソケットを作り、サーバとTCP通信をしているとします。 このとき、クライアントが動いて、アクセスポイントBに接続したとします(接続が自動で切り替わる)。 このような場合でも、サーバとクライアントのコネクションは保っていられるのでしょうか? もしくは、このような場合でもコネクションを保つ方法はあるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • Webサーバ機能を持った端末へのアクセス

    Webサーバ機能を持った端末(ホスト名の設定は出来ない)を ネットワークに接続しブラウザから閲覧したいのですが ネットワークのプロキシサーバーがhttp://IPアドレスでのアクセスを 許可しません。プロキシの設定は自動スクリプトで 行われており書き換えは不可能です、又、DNSでIPアドレスの 関連付けもネットワーク管理者から断られて出来ません このような状況でWebサーバ機能を持った端末へアクセスする方法は あるのでしょうか。

  • ソケットを使ってメッセージを回す

    ソケットを使ってメッセージをリング状に回す通信を考えています。クライアントを一台指定し、サーバを複数立ち上げます。クライアントからメッセージを受け取ったサーバが別のサーバに送ることができません。その時BindExceptionError Address Already in use.とエラー表示されます。ソケット通信で、別のIPとポート番号を新しく生成して送ることができないのでしょうか。プログラム等を記述してもらえたら幸いです。どうかよろしくお願いします。

  • プロセス間通信について

    こんばんは、皆さん。 自分の意識の中では、プロセス間通信とは「ソケット通信」の事を指していると 思っており、その上でC言語で作成する必要があって、それについての参考になるような サイトや本を検索しているのですが、これ!という決め手なものが見つかっていません。 またプロセス間通信には「パイプインタフェース」!?というのもあるようで、 ソケット通信とどう違うのか、ちょっと混乱してきております。 プロセス間通信について分かりやすいお勧め本を教えていただけませんか。 よろしくお願いします。

  • ソケット通信のシミュレータツールについて

    ソケット通信を使用したクライアント機能のテストを行うために、サーバ側を シミュレートするツールを探しています。 必要なツールの条件は、 『クライアント側から送信された電文をそのままの内容で自動で返す』 シミュレータです。 クライアントの送信データの中で動的にインクリメントしている番号があり、 サーバ側ではその番号をそのまま返す必要があるためです。 クライアントからの電文送信量も多いため、ツールの機能として、受信したデータに 対して折り返しのデータを事前に指定しておくというものではなく、 単純に同一データを自動で折り返すというものが望ましいのですが・・・。 どなたか良いツールをご存知ないでしょうか?

専門家に質問してみよう