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


16

「ソケットプログラミング」と「ネットワークプログラミング」について話すとき、大きな違いはありますか?

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

回答:


26

ソケットプログラミング(少なくともこの用語は通常使用されます)は、特定の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で使用され、ネットワークでは使用されません。また、ソケットが実際にサポートしていないルーター管理などの他のプロトコルも文字通り何十もあります(未加工のソケットを超えて、任意のパケットを構築して送信できます)。


おかげで、今、これは賛成に値する答えです。:-)それで、私がソケットプログラミングを知っていると言うとき、それは「すべて」をTCP / UDPだけで扱うことを意味すると結論づけることができますか?TCP / UDPに関するすべてを知る必要がありますか?
Aquarius_Girl

@AnishaKaul:編集済みの回答をご覧ください。
ジェリーコフィン

@JerryCoffin:ソケットもIPベースのプロトコルのサブセットであることに注意してください。ICMP / IPなど、ソケットでカバーされないものもあります。
マシューシャーリー14年

6

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


@Anishaカウル:さて、RPCプログラミングは、ネットワークプログラミング(そのサブセット)と1つの重要なRPCの概念である、いわゆる文字列が結合 -参照)msdn.microsoft.com/en-us/library/aa378691(v=VS.85を.aspx BSDソケットをプログラミングする場合、そのことは必要ありません。
sharptooth

@Anisha Kaul:いいえ、「すべての可能性」は膨大なリストです。広く使用されているいくつかの名前を付けます-Java RMIと.NET Remotingは良い例です。
sharptooth

-3

確かに、ネットワークプログラミングにはネットワークテクノロジーが必要ですが、一方でソケットプログラミングはネットワークプログラミングのサブセットです。現在のほとんどのネットワークプログラミングは、ソケットを直接使用するか、ソケットの上にある他のさまざまな層を使用して行われます。


3
これは、既に前の回答に掲載されたものに比べて大幅何も追加していないようだ
ブヨ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.