diferencia entre la programación de socket y la programación Http


Respuestas:


109

HTTP es un protocolo de aplicación. Básicamente significa que HTTP en sí mismo no se puede usar para transportar información hacia / desde un punto final remoto. En cambio, se basa en un protocolo subyacente que en el caso de HTTP es TCP.

ingrese la descripción de la imagen aquí

Puede leer más sobre las capas OSI si está interesado.

Los sockets, por otro lado, son una API que la mayoría de los sistemas operativos proporcionan para poder hablar con la red. La API de socket admite diferentes protocolos desde la capa de transporte y hacia abajo.

Eso significa que si desea utilizar TCP, utilice sockets. Pero también puede usar sockets para comunicarse usando HTTP, pero luego debe decodificar / codificar mensajes de acuerdo con la especificación HTTP ( RFC2616 ). Dado que eso puede ser una tarea enorme para la mayoría de los desarrolladores, también preparamos clientes en nuestros marcos de desarrollo (como .NET), por ejemplo, WebClientlas HttpWebRequestclases o .


2
Entonces, ambos usan TCP, es solo que HTTP responde en un formato predefinido y el socket proporciona datos como devueltos desde otro extremo de un socket, ¿verdad?
आनंद

4
Sí. TCP se asegura de que todo llegue (capa de transporte) y HTTP indica qué deben hacer las aplicaciones web.
jgauffin

25

Con HTTP, usa el protocolo HTTP de alto nivel (que funciona sobre un socket). No tiene sesión, lo que significa que envía una solicitud de texto como GET google.comy recibe texto o datos binarios a cambio, después de que se cierra la conexión (en HTTP 1.1, las conexiones persistentes están disponibles)

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

Con los sockets, vas al nivel inferior y realmente controlas la conexión y envías / recibes bytes sin procesar.

Ejemplo:

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

La conexión no está cerrada desde HTTP 1.1.
Marqués de Lorne

@EJP: depende de cómo Connectionesté configurado el encabezado;)
jgauffin

@jgauffin Exactamente. No está cerrado a voluntad.
Marqués de Lorne

Es cierto, pero esos son los detalles que OP descubrirá él mismo junto con otra información del 95% sobre este tema.
Anri

13

Conexión HTTP

  • La conexión HTTP es un protocolo que se ejecuta en un socket.
  • La conexión HTTP es una abstracción de nivel superior de una conexión de red.
  • Con la conexión HTTP, la implementación se encarga de todos estos detalles de nivel superior y simplemente envía una solicitud HTTP (información de encabezado) y recibe una respuesta HTTP del servidor.

Conexión de enchufe

  • Socket se utiliza para transportar datos entre sistemas. Simplemente conecta dos sistemas juntos, una dirección IP es la dirección de la máquina a través de una red basada en IP.
  • Con la conexión de socket puede diseñar su propio protocolo para la conexión de red entre dos sistemas.
  • Con la conexión Socket, debe cuidar todos los detalles de nivel inferior de una conexión TCP / IP.

1

La programación HTTP o la solicitud HTTP se utilizan para un acoplamiento flexible y una comunicación de tecnología de lenguaje de plataforma neutral donde se utiliza una programación de socket donde el sistema tiene un protocolo de especificación de lenguaje


1
¿A qué te refieres con idioma? Una aplicación Java puede comunicarse con una aplicación Python a través de sockets, por ejemplo
Adam Hughes

Creo que lo que quiere decir es que, por lo general, si desea conectar sistemas débilmente acoplados (o totalmente diferentes), HTTP es útil: una interfaz construida con alguna tecnología con una compilación respaldada con otra tecnología, accediendo a recursos en la web a través de URL. Mientras que, por lo general, si utiliza protocolos de conexión de nivel inferior como TCP / UDP, probablemente esté organizando una comunicación con sistemas con tecnologías similares (por ejemplo, diferentes aplicaciones Java). ¿Es esto correcto? Estoy tratando de entenderlo yo mismo.
Nicola Amadio

0

para que dos puntos finales puedan comunicarse entre sí, ambos deben seguir un conjunto de reglas. en la computadora, este conjunto de reglas se llama protocolo.

por ejemplo, para un punto final como el navegador y para otro como un servidor web, ambos deben seguir un conjunto de reglas o protocolo llamado http para poder comunicarse e intercambiar información. por lo que en la World Wide Web y en este tipo de comunicaciones, solo aquellos que hablan en base a este protocolo http pueden comunicarse entre sí.

socket es solo un punto final. podría seguir el protocolo http para entrar en una comunicación en www como un cliente que solicita una página o podría actuar como un servidor que escucha las conexiones. o tal vez podría seguir otro conjunto de reglas o protocolos como ssh, ftp y comunicarse de otras formas.

ahora, en la programación de sockets, puede hacer un socket, vincularlo a una dirección IP y un número de puerto para que actúe como un número de puerto y decirle que siga http, ssh, ftp o lo que desee en función de las comunicaciones que desee utilizar su enchufe para.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.