ソケットプログラミングとHttpプログラミングの違いは何ですか?誰でも助けてくれますか?
HTTPはアプリケーションプロトコルです。基本的に、HTTP自体を使用してリモートエンドポイントとの間で情報を転送することはできません。代わりに、HTTPの場合はTCPである基礎となるプロトコルに依存しています。
興味がある場合は、 OSIレイヤー の詳細をご覧ください。
一方、ソケットは、ほとんどのオペレーティングシステムがネットワークと通信できるように提供するAPIです。ソケットAPIは、トランスポート層以降のさまざまなプロトコルをサポートします。
つまり、TCPを使用する場合は、ソケットを使用します。ただし、ソケットを使用してHTTPを使用して通信することもできますが、HTTP仕様( RFC2616 )に従ってメッセージをデコード/エンコードする必要があります。これはほとんどの開発者にとって大きなタスクになる可能性があるため、開発者フレームワーク(.NETなど)で、たとえばWebClient
クラスまたはHttpWebRequest
クラスなどのクライアントも用意しました。
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接続
- HTTP接続は、ソケットで実行されるプロトコルです。
- HTTP接続は、ネットワーク接続の高レベルの抽象化です。
- HTTP接続を使用すると、実装はこれらすべての高レベルの詳細を処理し、HTTP要求(ヘッダー情報)を送信し、サーバーからHTTP応答を受信するだけです。
ソケット接続
- ソケットは、システム間でデータを転送するために使用されます。 2つのシステムを接続するだけで、IPアドレスはIPベースのネットワーク上のマシンのアドレスです。
- ソケット接続を使用すると、2つのシステム間のネットワーク接続用に独自のプロトコルを設計できます。
- ソケット接続では、TCP/IP接続の下位レベルの詳細をすべて処理する必要があります。
HTTPプログラミングまたはHTTPリクエストは、疎結合およびプラットフォーム中立言語テクノロジ通信に使用されます。システムがlanguage仕様プロトコルを持つソケットプログラミングが使用される場合