ソケットプログラミングとHttpプログラミングの違い


回答:


109

HTTPはアプリケーションプロトコルです。これは基本的に、HTTP自体を使用して、リモートエンドポイントとの間で情報を転送できないことを意味します。代わりに、HTTPの場合はTCPである基本プロトコルに依存します。

ここに画像の説明を入力してください

興味がある場合は、OSIレイヤーの詳細をご覧ください。

一方、ソケットは、ほとんどのオペレーティングシステムがネットワークと通信できるように提供するAPIです。ソケットAPIは、トランスポート層以下のさまざまなプロトコルをサポートします。

つまり、TCPを使用する場合はソケットを使用します。ただし、ソケットを使用してHTTPを使用して通信することもできますが、その場合はHTTP仕様(RFC2616)に従ってメッセージをデコードまたはエンコードする必要があります。これは、ほとんどの開発者にとって大きなタスクになる可能性があるため、開発者フレームワーク(.NETなど)にクライアントを準備WebClientHttpWebRequestました。


2
つまり、どちらもTCPを使用しています。HTTPが事前定義された形式で応答し、ソケットがソケットの別の端から返されたデータを提供するだけですよね?
आनंद

4
うん。TCPはすべてが到着することを確認し(トランスポート層)、HTTPはWebアプリケーションが何をすべきかを伝えます。
jgauffin

25

HTTPでは、高レベルのHTTPプロトコルを使用します(これはソケットの上で動作します)。これはセッションレスです。つまりGET google.com、接続が閉じられた後に、テキストリクエストと同様にテキストリクエストを送信し、テキストまたはバイナリデータを受信します(HTTP 1.1では永続的な接続が利用可能です)。

MSDNの例:

public static void Main (string[] args)
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create (args[0]);
    HttpWebResponse response = (HttpWebResponse)request.GetResponse ();

    Console.WriteLine ("Content length is {0}", response.ContentLength);
    Console.WriteLine ("Content type is {0}", response.ContentType);

    // Get the stream associated with the response.
    Stream receiveStream = response.GetResponseStream ();

    // Pipes the stream to a higher level stream reader with the required encoding format. 
    StreamReader readStream = new StreamReader (receiveStream, Encoding.UTF8);

    Console.WriteLine ("Response stream received.");
    Console.WriteLine (readStream.ReadToEnd ());
    response.Close ();
    readStream.Close ();
} 

ソケットを使用すると、レベルを下げて、実際に接続を制御し、生のバイトを送受信します。

例:

var remoteEndpoint=new IPEndPoint(IPAddress.Loopback, 2345);
var socket = new Socket(remoteEndpoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
socket.Connect(remoteEndpoint);
socket.Send(new byte[] {1, 2, 3, 4});

接続はHTTP 1.1から閉じられません。
ローンの侯爵2013

@EJP:Connectionヘッダーの設定方法によって異なります;)
jgauffin 2013

@jgauffinその通りです。それは意欲的に閉じられていません。
ローン侯爵、2013

確かに、しかしそれはOPがこのトピックに関する他の95%の情報と一緒に彼自身を発見する詳細です。
アンリ

13

HTTP接続

  • HTTP接続は、ソケットで実行されるプロトコルです。
  • HTTP接続は、ネットワーク接続の上位レベルの抽象化です。
  • HTTP接続では、実装はこれらすべての高レベルの詳細を処理し、HTTP要求(一部のヘッダー情報)を送信し、サーバーからHTTP応答を受信するだけです。

ソケット接続

  • ソケットは、システム間でデータを転送するために使用されます。2つのシステムを接続するだけで、IPアドレスはIPベースのネットワーク上のマシンのアドレスです。
  • ソケット接続を使用すると、2つのシステム間のネットワーク接続用に独自のプロトコルを設計できます。
  • ソケット接続では、TCP / IP接続のすべての下位レベルの詳細に注意する必要があります。

1

HTTPプログラミングまたはHTTP要求は 、システムに言語仕様プロトコルがある場合にソケットプログラミングが使用されるのと同様に、疎結合およびプラットフォーム中立言語テクノロジ通信に使用されます。


1
言語とはどういう意味ですか?例えば、ソケットを介して、Pythonアプリケーションと通信することができるJavaアプリケーション
アダム・ヒューズ

彼が意味するところは、通常、疎結合(またはまったく異なる)システムに接続する場合、HTTPが役立つということです。あるテクノロジーで構築されたフロントエンドと、別のテクノロジーで裏打ちされたビルドがあり、URLを介してWeb上のリソースにアクセスします。一方、TCP / UDPのような低レベルの接続プロトコルを使用している場合、通常は、類似のテクノロジー(異なるJavaアプリケーションなど)を備えたシステムとの通信を調整している可能性があります。これは正解?私はそれを自分で理解しようとしています。
ニコラアマディオ

0

2つのエンドポイントが互いに通信できるようにするには、両方が一連のルールに従う必要があります。コンピュータでは、これらのルールセットはプロトコルと呼ばれます。

たとえば、ブラウザのようなエンドポイントやWebサーバーのようなエンドポイントの場合、情報を通信および交換できるように、両方ともhttpと呼ばれる一連のルールまたはプロトコルに従う必要があります。したがって、World Wide Webおよびこの種の通信では、このhttpプロトコルに基づいて話す人だけが正常に相互に通信できます。

ソケットは単なるエンドポイントです。httpプロトコルにしたがい、ページをリクエストするクライアントとしてwwwで通信したり、接続をリッスンするサーバーとして機能したりできます。または、ssh、ftpなどの別のルールまたはプロトコルのセットに従い、他の方法で通信することもできます。

ソケットプログラミングでは、ソケットを作成し、それをIPアドレスとポート番号にバインドしてポート番号として機能させ、http、ssh、ftpなど、使用したい通信に基づいて必要なものに従うように指示します。ソケット。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.