разница между программированием сокетов и HTTP-программированием
в чем разница между программированием сокетов и программирования http? кто-нибудь может помочь, пожалуйста?
4 ответа:
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-ответ от сервера.
Разъем
- гнездо используется для передачи данных между системами. Он просто соединяет две системы, IP-адрес является адресом машина по сети на основе IP.
- с соединением гнезда вы можете конструировать ваш собственный протокол для сетевого соединения между 2 системами.
- С соединением сокета вам нужно позаботиться обо всех деталях более низкого уровня соединения TCP/IP.