私はプログラミングに比較的慣れておらず、ソケットプログラミングを独学しようとしています。私の理解によると、プロセス(サーバープロセスなど)がネットワーク経由で別のプロセス(クライアントプロセスなど)と通信する必要がある場合、両方のエンドポイントにソケットが必要です。
サーバー プロセスとクライアント プロセスが同じマシン上にある場合、ストリームやデータグラムがネットワークを経由しないのに、なぜソケットが必要なのですか? 同じマシン内にあります。誰かがこの理由を明確にしてもらえますか?
私はプログラミングに比較的慣れておらず、ソケットプログラミングを独学しようとしています。私の理解によると、プロセス(サーバープロセスなど)がネットワーク経由で別のプロセス(クライアントプロセスなど)と通信する必要がある場合、両方のエンドポイントにソケットが必要です。
サーバー プロセスとクライアント プロセスが同じマシン上にある場合、ストリームやデータグラムがネットワークを経由しないのに、なぜソケットが必要なのですか? 同じマシン内にあります。誰かがこの理由を明確にしてもらえますか?
では、同じマシン上の 2 つのプロセスは、ソケットを使用せずにどのように通信するのでしょうか?
...
そうです、ソケットは、ネットワーク経由か同じマシン内かに関係なく、 2 つのプロセスが通信する方法です。同じマシン内で他の通信メカニズムを発明することもできます (そして、たくさんあります)。
それらが常に同じマシンにあることが確実な場合は、ソケットは必要ありません。
ファイルを介した共有など、同じマシン上のプロセス間で他のデータ共有メカニズムがあります。ただし、ソケットは、抽象化を提供することで、同じマシン上にあるか別のマシン上にあるかをユーザーに透過的にするため、別のマシンで必要になる場合は、ソケットが良い方法です。
どのOSを使用していますか?Windows の場合は、IPC を実行するためのこれらすべてがあります。
Windows では、次のプロセス間通信 (IPC) メカニズムがサポートされています。
先に進む前に、お使いのオペレーティング システムをお知らせください。プロセス間通信に関するいくつかの手がかりを提供できます。
ソケットは、TCP を使用して 2 台のコンピューター間の通信メカニズムを提供します。クライアント プログラムは、通信の最後にソケットを作成し、そのソケットをサーバーに接続しようとします。
接続が確立されると、サーバーは通信の最後にソケット オブジェクトを作成します。クライアントとサーバーは、ソケットへの書き込みとソケットからの読み取りによって通信できるようになりました。
java.net.Socket クラスはソケットを表し、java.net.ServerSocket クラスは、サーバー プログラムがクライアントをリッスンしてクライアントとの接続を確立するメカニズムを提供します。
ソケットを使用して 2 台のコンピューター間で TCP 接続を確立すると、次の手順が実行されます。
The server instantiates a ServerSocket object, denoting which port number communication is to occur on.
The server invokes the accept() method of the ServerSocket class. This method waits until a client connects to the server on the given port.
After the server is waiting, a client instantiates a Socket object, specifying the server name and port number to connect to.
The constructor of the Socket class attempts to connect the client to the specified server and port number. If communication is established, the client now has a Socket object capable of communicating with the server.
On the server side, the accept() method returns a reference to a new socket on the server that is connected to the client's socket.
接続が確立されると、I/O ストリームを使用して通信を行うことができます。各ソケットには、OutputStream と InputStream の両方があります。クライアントの OutputStream はサーバーの InputStream に接続され、クライアントの InputStream はサーバーの OutputStream に接続されます。
TCP は双方向通信プロトコルであるため、両方のストリームで同時にデータを送信できます。ソケットを実装するためのメソッドの完全なセットを提供する次の便利なクラスがあります。
異なるプロセス間で通信する方法はいくつかありますが、ソケットはその 1 つです。
いつものように、トレードオフがあります。
IPC を行うには、より高速でリソース消費の少ない方法があります。それらのいくつかは、コードの複雑さを増し、正しく使用しないと、アプリケーションにバグを追加する可能性があります。
ソケットの主な利点は、ソケットが透過的であることです。後で 1 つ以上のプロセスを別のマシンで実行することにした場合、コードを変更する必要はありません。