Unterschied zwischen Socket-Programmierung und HTTP-Programmierung


Antworten:


109

HTTP ist ein Anwendungsprotokoll. Dies bedeutet im Grunde, dass HTTP selbst nicht zum Transportieren von Informationen zu / von einem Remote-Endpunkt verwendet werden kann. Stattdessen basiert es auf einem zugrunde liegenden Protokoll, das im Fall von HTTP TCP ist.

Geben Sie hier die Bildbeschreibung ein

Wenn Sie interessiert sind, können Sie mehr über OSI-Ebenen lesen .

Sockets hingegen sind eine API, die die meisten Betriebssysteme bereitstellen, um mit dem Netzwerk kommunizieren zu können. Die Socket-API unterstützt verschiedene Protokolle von der Transportschicht bis hinunter.

Das heißt, wenn Sie TCP verwenden möchten, verwenden Sie Sockets. Sie können aber auch Sockets verwenden, um über HTTP zu kommunizieren. Anschließend müssen Sie Nachrichten gemäß der HTTP-Spezifikation ( RFC2616 ) dekodieren / kodieren . Da dies für die meisten Entwickler eine große Aufgabe sein kann, haben wir auch Clients in unseren Entwickler-Frameworks (wie .NET) vorbereitet, zum Beispiel die WebClientoder die HttpWebRequestKlassen.


2
Beide verwenden also TCP. HTTP antwortet nur in einem vordefinierten Format und Socket gibt Daten aus, die von einem anderen Ende eines Sockets zurückgegeben wurden, oder?
आनंद

4
ja. TCP stellt sicher, dass alles ankommt (Transportschicht) und HTTP sagt, was die Webanwendungen tun sollen.
Jgauffin

25

Bei HTTP verwenden Sie ein HTTP-Protokoll auf hoher Ebene (das über einem Socket funktioniert). Es ist sitzungslos, was bedeutet, dass Sie Textanfragen wie senden GET google.comund im Gegenzug Text oder Binärdaten empfangen, nachdem diese Verbindung geschlossen wurde (in HTTP 1.1 sind dauerhafte Verbindungen verfügbar).

MSDN-Beispiel:

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 ();
} 

Mit Sockets gehen Sie auf die niedrigere Ebene und steuern tatsächlich die Verbindung und senden / empfangen Rohbytes.

Beispiel:

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});

Die Verbindung wird nicht über HTTP 1.1 geschlossen.
Marquis von Lorne

@EJP: hängt davon ab, wie der ConnectionHeader gesetzt ist;)
jgauffin

@jgauffin Genau. Es ist nicht wohl oder übel geschlossen.
Marquis von Lorne

Stimmt, aber das sind die Details, die OP zusammen mit anderen 95% Informationen zu diesem Thema selbst entdecken wird.
Anri

13

HTTP-Verbindung

  • Die HTTP-Verbindung ist ein Protokoll, das auf einem Socket ausgeführt wird.
  • Die HTTP-Verbindung ist eine übergeordnete Abstraktion einer Netzwerkverbindung.
  • Bei einer HTTP-Verbindung kümmert sich die Implementierung um all diese übergeordneten Details und sendet einfach eine HTTP-Anfrage (einige Header-Informationen) und empfängt eine HTTP-Antwort vom Server.

Socket-Verbindung

  • Socket wird zum Transportieren von Daten zwischen Systemen verwendet. Es verbindet einfach zwei Systeme miteinander. Eine IP-Adresse ist die Adresse des Computers über ein IP-basiertes Netzwerk.
  • Mit der Socket-Verbindung können Sie Ihr eigenes Protokoll für die Netzwerkverbindung zwischen zwei Systemen entwerfen.
  • Bei der Socket-Verbindung müssen Sie sich um alle untergeordneten Details einer TCP / IP-Verbindung kümmern.

0

HTTP - Programmierung oder HTTP - Anforderung wird für lose Kopplung und verwendet plattformunabhängige Sprachtechnologie Kommunikation , bei der als Socket - Programmierung verwendet wird , in dem System hat Sprachspezifikation Protokoll


1
Was meinst du mit Sprache? Eine Java-Anwendung kann beispielsweise über Sockets mit einer Python-Anwendung kommunizieren
Adam Hughes,

0

Damit zwei Endpunkte miteinander kommunizieren können, sollten beide einer Reihe von Regeln folgen. Im Computer werden diese Regeln als Protokoll bezeichnet.

Zum Beispiel sollten beide für einen Endpunkt wie einen Browser und für einen anderen wie einen Webserver eine Reihe von Regeln oder Protokollen mit dem Namen http befolgen, um Informationen kommunizieren und handeln zu können. Im World Wide Web und bei dieser Art der Kommunikation konnten nur diejenigen, die auf der Grundlage dieses http-Protokolls sprechen, erfolgreich miteinander sprechen.

Socket ist nur ein Endpunkt. Es könnte dem http-Protokoll folgen, um als Client, der eine Seite anfordert, eine Kommunikation in www zu erhalten, oder es könnte als Server fungieren, der Verbindungen abhört. oder vielleicht könnte es einem anderen Satz von Regeln oder Protokollen wie ssh, ftp folgen und auf andere Weise kommunizieren.

Jetzt können Sie in der Socket-Programmierung einen Socket erstellen, ihn an eine IP-Adresse und eine Portnummer binden, um als Portnummer zu fungieren, und ihn anweisen, http, ssh, ftp oder was auch immer Sie möchten, basierend auf der Kommunikation, die Sie verwenden möchten Steckdose für.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.