「ソケットプログラミング」と「ネットワークプログラミング」について話すとき、大きな違いはありますか?
「ソケットプログラミング」ではなく「ネットワークプログラミング」を扱っているトピックはありますか?
「ソケットプログラミング」と「ネットワークプログラミング」について話すとき、大きな違いはありますか?
「ソケットプログラミング」ではなく「ネットワークプログラミング」を扱っているトピックはありますか?
回答:
ソケットプログラミング(少なくともこの用語は通常使用されます)は、特定の1つのネットワークAPIに対するプログラミングです。ソケットはIPベースのプロトコル(主にTCPおよびUDP)1をサポートします。
ネットワークプログラミングは、他のさまざまなAPIを使用して実行できます。Windowsには、WNet *やNet *関数など、プロトコルに依存しないAPIがいくつかあります。Windowsの古いバージョンもNetBIOS / NetBEUI(NetBIOSエンドユーザーインターフェイス)を使用し、最もサポートされている(おそらくまだ使用している)IPX / SPX(古いNetwareプロトコル)。
ただし、ほとんどの現在のネットワークプログラミングは、ソケットを直接使用するか、ソケットの上にある他のさまざまな層を使用して行われます(たとえば、通常はTCP over socketで実装されるHTTP上で非常に多く行われます)。TCP / IPおよびUDP / IP(および他の多くのIPベースのプロトコル)は、主にソケットインターフェイスを介して行われます。理論的には、他のプログラミングインターフェイスを使用することもできますが、実際にはソケットで十分であるように見えるため、交換することにあまり関心はありません。ただし、Windowsソケット(WinSock)には、Windows固有の拡張機能がかなりあります。これらの拡張機能を使用するコードが実際に「ソケット」コードとして適格であるかどうかについて、いくつかの議論が開かれていると思います-それらは同じ概念に基づいた拡張機能ですが、それらを使用するコードはそうではありません 通常、他のシステムに移植できます。「ソケット」として適格かどうかは、ソケットを概念として考えるか、非常に具体的な関数、パラメーターなどのセットとして考えるかによって決まります。
編集(コメントへの返信):
「ソケットを知ること」がTCPとUDPについて「すべて」を知ることを意味するかどうかを言うのは少し難しいです。ほんの1つだけを考えてみましょう。ソケットの典型的なデモプログラムの1つは、クライアント/サーバーチャットプログラムの作成です。クライアントはサーバーに接続し、あるクライアントのユーザーが何かを入力すると、同じサーバーに接続されている他のクライアントに転送されます。各クライアントはサーバーから受信したものを表示し、ユーザーが他のクライアントに送信されるメッセージを入力できるようにします。
同時に、AIM、Windows Messenger、iChatなどの「本物の」チャットプログラムが何を伴うかを検討してください。テキストだけでなく、音声、ビデオ、ファイル転送、グループ、リストなどを処理するために、典型的なプログラムにはおそらく、SIP、STUN、TURN、RTCP、RTP、XAMPP、mDNSなどを含む12種類の標準が含まれます。
IMO、「ソケットを知っている」人は、ヘルプファイル(など)に多くの時間を費やすことなく、数時間で最初の(デモレベル、テキストのみ)チャットプログラムをコーディングできるはずです。彼らが「本当の」チャットプログラムに取り組んでいる以前の経験を少なくとも主張していない限り、どのRFC /標準がそのようなものに適用されているかを知ることさえ期待しないでしょう。
一般的に同じことが当てはまります。人々がネットワーク上で行うすべてのさまざまなことに適用されるRFC(およびその他のさまざまな標準)の数を考えると、誰もがそれらのすべてを記憶していると期待するのは不合理です。それにもかかわらず、人々が「ローカル」プログラムで簡単に処理できることを期待するものに対する一連の要件がある場合、要件として「ネットワーク経由」を追加するだけでは通常、大きな難易度は追加されません。 (ただし、ネットワーク遅延などの問題を処理する場合があります)。
1 Unix上のソケットもUnixファミリのソケットをサポートしますが、これらは(少なくとも通常)マシン内IPCで使用され、ネットワークでは使用されません。また、ソケットが実際にサポートしていないルーター管理などの他のプロトコルも文字通り何十もあります(未加工のソケットを超えて、任意のパケットを構築して送信できます)。
「ネットワークプログラミング」には、RPCなどのネットワークテクノロジーが必要です。ソケット(ほとんどの場合、BSDソケットを意味します)はそのような技術の例です。したがって、「ソケットプログラミング」は「ネットワークプログラミング」のサブセットです。