web-dev-qa-db-ja.com

ネットワークプログラミングとソケットプログラミングの違い

「ソケットプログラミング」と「ネットワークプログラミング」を比較すると、大きな違いはありますか?

「ソケットプログラミング」ではなく「ネットワークプログラミング」を扱っているトピックはありますか?

16
Aquarius_Girl

ソケットプログラミング(少なくともこの用語が通常使用される場合)は、1つの特定のネットワークAPIに対するプログラミングです。ソケットはIPベースのプロトコルをサポートします(主にTCPおよびUDP)1

他のさまざまなAPIを使用してネットワークプログラミングを行うことができます。 Windowsには、WNet *やNet *関数など、プロトコルに依存しない多数のAPIがあります。古いバージョンのWindowsもNetBIOS/NetBEUI(NetBIOSエンドユーザーインターフェイス)を使用しており、ほとんどがサポートされています(おそらくまだサポートされています)IPX/SPX(古いNetwareプロトコル)。

ただし、最新のネットワークプログラミングは、ソケットを直接使用するか、ソケットの上にある他のさまざまなレイヤーを使用して行われます(たとえば、通常、TCP overソケット)。TCP/ IPおよびUDP/IP(および他の多くのIPベースのプロトコル)は、主にソケットインターフェースを介して行われます。理論的には、他のプログラミングインターフェースを使用することもできますが、実際にはソケットで十分であるようです。したがって、それを置き換えることにそれほど関心はありません。ただし、Windowsソケット(WinSock)には、Windowsにほぼ固有のかなりの数の拡張機能があることに言及する必要があります。これらの拡張機能を使用するコードかどうかは、議論の余地があると思います本当に「ソケット」コードとして適格かどうか-それらは同じ概念に基づく拡張ですが、それらを使用するコードは通常他のシステムに移植できません。「ソケット」として適格かどうかは、主にソケットを概念、または非常に具体的なセットとして考えてください関数、パラメータなどの.

編集(コメントへの返信):

「ソケットを知っている」がTCPおよびUDPについてのすべてを知っていることを意味するかどうかを意味するかどうかを言うのは少し難しいです。ソケットの典型的なデモプログラムの1つは、クライアント/サーバーチャットプログラム。クライアントはサーバーに接続し、あるクライアントのユーザーが何かを入力すると、同じサーバーに接続されている他のクライアントに転送されます。各クライアントは、サーバーから受信したものを表示し、ユーザーに他のクライアントに送信するメッセージを入力します。

同時に、AIM、Windows Messenger、iChatなどの「実際の」チャットプログラムがどのようなものかを検討してください。テキストだけでなく、音声、ビデオ、ファイル転送、グループ、リストなどを処理するために、通常のプログラムには、SIP、STUN、TURN、RTCP、RTP、XAMPP、mDNSなどのさまざまな標準が含まれる可能性があります。 。

IMO、「ソケットを知っている」人は、最初の(デモレベル、テキストのみの)チャットプログラムを、ヘルプファイル(およびそのような)の調査に多くの時間を費やすことなく、数時間でコード化できるはずです。彼らが少なくとも「実際の」チャットプログラムでの作業経験があると主張しない限り、私は彼らがそのようなものにどのRFC /標準が適用されるかさえ知っているとは思っていません。

一般的に同じことが当てはまります。人々がネットワーク上で行うさまざまなことすべてに適用されるRFC(およびその他のさまざまな標準)の数を考えると、誰かがそれらのすべてを覚えていると期待するのは不合理です。それでも、人々が「ローカル」プログラムで簡単に処理できると期待するものに対する一連の要件がある場合、要件として「ネットワークを介して」追加するだけで、通常、大きな困難が生じることはありません。 (ただし、ネットワーク遅延などの問題に対処することはできます)。


1 Unix上のソケットもUnixファミリソケットをサポートしますが、これらは(少なくとも通常は)ネットワーク内ではなくマシン内IPCに使用されます。また、ソケットが実際にサポートしていないルーター管理など、文字通り数十の他のプロトコルがあります(生のソケット以外に、任意のパケットを作成して送信できます)。

26
Jerry Coffin

「ネットワークプログラミング」には、RPCなどのネットワークテクノロジーが必要です。ソケット(おそらくBSDソケットを意味する)は、そのようなテクノロジーの例です。したがって、「ソケットプログラミング」は「ネットワークプログラミング」のサブセットです。

6
sharptooth