різниця між програмуванням socket і Http програмуванням


Відповіді:


109

HTTP - це протокол програми. Це в основному означає, що сам HTTP не може використовуватися для транспортування інформації до / з віддаленої кінцевої точки. Натомість він спирається на базовий протокол, який у випадку HTTP - це TCP.

введіть тут опис зображення

Ви можете прочитати більше про шари OSI, якщо вас цікавить.

З іншого боку, розетки - це API, який надає більшість операційних систем, щоб мати можливість спілкуватися з мережею. API сокета підтримує різні протоколи від транспортного шару і вниз.

Це означає, що якщо ви хочете використовувати TCP, ви використовуєте сокети. Але ви також можете використовувати сокети для спілкування за допомогою HTTP, але тоді вам доведеться декодувати / кодувати повідомлення відповідно до специфікації HTTP ( RFC2616 ). Оскільки це може бути величезним завданням для більшості розробників, ми також отримали готових клієнтів у наших розробничих структурах (наприклад, .NET), наприклад, WebClientабо HttpWebRequestкласи.


2
Тож обидва використовують TCP, це просто те, що HTTP відповідає у заздалегідь заданому форматі, а сокет надає дані, як повернуті з іншого кінця сокета, так?
आनंद

4
так. TCP гарантує, що все надходить (транспортний рівень), а HTTP повідомляє, що повинні робити веб-додатки.
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.
Маркіз Лорн

@EJP: залежить від того, як встановлений Connectionзаголовок;)
jgauffin

@jgauffin Рівно. Це не замкнуто вольово-невольно.
Маркіз Лорн

Щоправда, але це деталі, які ОП розкриє сам разом з іншими 95% інформацією на цю тему.
Анрі

13

З'єднання HTTP

  • HTTP-з'єднання - це протокол, який працює на розетці.
  • HTTP-з'єднання - це абстракція мережевого з'єднання вищого рівня.
  • За допомогою HTTP-з'єднання реалізація бере на себе всі ці деталі вищого рівня та просто надсилає HTTP-запит (деяку інформацію заголовка) та отримує HTTP-відповідь від сервера.

Підключення до розетки

  • Socket використовується для транспортування даних між системами. Він просто з'єднує дві системи разом, IP-адреса - це адреса машини через мережу на базі IP.
  • Завдяки підключенню до гнізда ви можете створити власний протокол для мережевого з'єднання між двома системами.
  • Завдяки підключенню Socket вам потрібно подбати про всі деталі нижнього рівня TCP / IP-з'єднання.

1

HTTP-програмування або HTTP-запит використовується для слабкого з'єднання та мовної комунікації з нейтральною платформою, коли програмування сокета використовується там, де система має протокол специфікації мови


1
Що ви розумієте під мовою? Наприклад, програма java може спілкуватися з програмою Python через сокети, наприклад
Адам Хьюз

Я думаю, що він має на увазі те, що, як правило, якщо ви хочете підключити зв'язані (або зовсім інші) системи, HTTP корисний: інтерфейс, побудований за певною технологією з підтримкою збірки з іншою технологією, доступ до ресурсів в Інтернеті за допомогою URL-адрес. Якщо зазвичай ви використовуєте протоколи підключення нижчого рівня, такі як TCP / UDP, ви, ймовірно, організовуєте зв’язок із системами з подібними технологіями (наприклад, різними програмами Java). Чи це правильно? Я сам намагаюся зрозуміти це.
Nicola Amadio

0

щоб дві кінцеві точки мали змогу спілкуватися один з одним, вони повинні дотримуватися набору правил. в комп'ютері цей набір правил називається протоколом.

наприклад, для кінцевої точки, як браузер, і для іншої, як веб-сервер, вони повинні дотримуватися набору правил або протоколу під назвою http, щоб мати можливість спілкуватися та торгувати інформацією. тому у всесвітній павутині та подібному спілкуванні лише ті, хто спілкується на основі цього протоколу http, могли б успішно спілкуватися один з одним.

socket - це лише кінцева точка. це може слідувати протоколу http, щоб прийти в спілкування на веб-сайті як клієнт, який запитує сторінку, або він може діяти як сервер, який прослуховує з'єднання. а може, він може дотримуватися іншого набору правил або протоколів, таких як ssh, ftp та спілкуватися іншими способами.

Тепер у програмуванні socket ви можете зробити сокет, прив’язати його до ip-адреси та номера порту, щоб він виступав як номер порту та наказав йому слідувати http, ssh, ftp або все, що ви хочете, виходячи з комунікацій, які ви хочете використовувати розетка для.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.