131

ソケットプログラミングとHttpプログラミングの違いは何ですか?誰か助けてもらえますか?

4

6 に答える 6

126

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

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

興味があれば、 OSI層についてもっと読むことができます。

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

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

于 2013-02-27T10:48:33.253 に答える
30

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});
于 2013-02-27T09:18:00.223 に答える