私は検索することができ、ウィキペディアのエントリや他の場所をすでに見てきましたが、プログラミングの経験はありますが、概念を実際には把握していません。私を10歳のように扱い、ソケット通信について明確な説明をお願いできますか?
私は検索することができ、ウィキペディアのエントリや他の場所をすでに見てきましたが、プログラミングの経験はありますが、概念を実際には把握していません。私を10歳のように扱い、ソケット通信について明確な説明をお願いできますか?
回答:
例を挙げましょう。あなたの住所に住んでいない友人と通信/チャットしたいとします。そのためには、「通信チャネル」を確立する必要があります。電話を使用してこの通信を行いたいとします。街には電話線のネットワークがあり、それがすべての家に広がっていることを知っています。
今、あなたの家には電話ソケットがあり、あなたの友人の家には電話ソケットがあります。通信を行うには、通信の両端で電話をソケットに接続して、あなたとあなたの友人がネットワークに接続する必要があります。プログラミングのソケットは、概念的には電話ソケットと同じです。
プログラミングでは、互いに通信したい2つのプロセス(プログラムを実行)があります。そのために、彼らは自分自身の間に通信リンクを確立する必要があります。繰り返しますが、利用可能なネットワークがあり、何らかのソケットを使用してこのネットワークに接続するだけです。Unixソケットは、ネットワークへのこの接続性/プラグ可能性を提供するソケットの1つです。したがって、2つのプログラムのそれぞれに、ソケットを介してネットワークに接続するジョブを実行するコードがあります。
残りは詳細です。
Unixソケットは双方向ソケットです-おそらく慣れ親しんでいるIPベースのソケットのようであり、おそらく慣れ親しんでいるパイプに似ています。
興味深いプロパティの小さなセットがあります:
基本的に、これらは他のソケットと同等です。パイプよりも興味深い特性がわずかにありますが、その他の点では根本的な違いはありません。通常、パイプよりもIPCレイテンシが長く、多くの場合バッファが大きくなります。ただし、調整できる場合もありますが、プラットフォームによって異なります。
覚えておくべき最後の興味深い特性は、名前空間としてファイルシステムを使用することです。したがって、以前の関係がないソフトウェアでは、匿名パイプではなく名前付きパイプのようなものです。(抽象的な名前空間ソケットは同じですが、「ファイル」パスが存在する必要はありません。)
それよりも深いものはありません。通常のパイプやローカルホストへのTCP接続とは根本的に異なるスーパーシークレットの隠しプロパティはありません。
Linuxソケットのプログラミング、パート1:TCP / IPの使用は、私にとって非常にうまく機能しました。IPネットワークとネットワークレイヤーの概要から始まり、次にCとPythonの両方で単純なエコーサーバーとクライアントを実装する方法を示します。