Jaka jest różnica między programowaniem w gniazdach a programowaniem za pomocą protokołu HTTP? czy ktoś może pomóc, proszę?
Jaka jest różnica między programowaniem w gniazdach a programowaniem za pomocą protokołu HTTP? czy ktoś może pomóc, proszę?
Odpowiedzi:
HTTP to protokół aplikacji. Zasadniczo oznacza to, że sam HTTP nie może być używany do przesyłania informacji do / ze zdalnego punktu końcowego. Zamiast tego opiera się na podstawowym protokole, którym w przypadku HTTP jest TCP.
Możesz przeczytać więcej o warstwach OSI, jeśli jesteś zainteresowany.
Z drugiej strony gniazda są API, które większość systemów operacyjnych zapewnia, aby móc komunikować się z siecią. Interfejs API gniazda obsługuje różne protokoły od warstwy transportowej i w dół.
Oznacza to, że jeśli chcesz używać TCP, używasz gniazd. Ale możesz również używać gniazd do komunikacji za pomocą protokołu HTTP, ale wtedy musisz dekodować / zakodować wiadomości zgodnie ze specyfikacją HTTP ( RFC2616 ). Ponieważ może to być ogromne zadanie dla większości programistów, mamy również gotowych klientów w naszych frameworkach deweloperskich (takich jak .NET), na przykład klasy WebClient
lub HttpWebRequest
.
W przypadku HTTP używasz protokołu HTTP wysokiego poziomu (który działa na górze gniazda). Jest bezsesyjny, co oznacza, że wysyłasz żądanie tekstowe, takie jak GET google.com
i otrzymujesz w zamian tekst lub dane binarne, po zamknięciu tego połączenia (w HTTP 1.1 dostępne są trwałe połączenia)
Przykład 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 ();
}
Dzięki gniazdom przechodzisz na niższy poziom i faktycznie kontrolujesz połączenie i wysyłasz / odbierasz surowe bajty.
Przykład:
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});
Connection
nagłówka;)
Połączenie HTTP
- Połączenie HTTP to protokół działający w gnieździe.
- Połączenie HTTP jest abstrakcją wyższego poziomu połączenia sieciowego.
- W przypadku połączenia HTTP implementacja zajmuje się wszystkimi tymi szczegółami wyższego poziomu i po prostu wysyła żądanie HTTP (niektóre informacje z nagłówka) i otrzymuje odpowiedź HTTP z serwera.
Połączenie z gniazdem
- Socket służy do przesyłania danych między systemami. Po prostu łączy dwa systemy razem, adres IP to adres urządzenia w sieci opartej na IP.
- Dzięki połączeniu przez gniazdo możesz zaprojektować własny protokół połączenia sieciowego między dwoma systemami.
- W przypadku połączenia przez gniazdo musisz zadbać o wszystkie szczegóły niższego poziomu połączenia TCP / IP.
Programowanie HTTP lub żądanie HTTP są używane do luźnego łączenia i komunikacji w języku neutralnym dla platformy, gdzie jako programowanie w gniazdach jest używane, gdy system ma protokół specyfikacji języka
aby dwa punkty końcowe mogły ze sobą rozmawiać, oba powinny przestrzegać zestawu reguł. w komputerze ten zestaw reguł nazywa się protokołem.
na przykład w przypadku punktu końcowego, takiego jak przeglądarka, i innego, takiego jak serwer WWW, oba powinny przestrzegać zestawu reguł lub protokołu zwanego http, aby móc komunikować się i handlować informacjami. tak więc w sieci WWW i tego rodzaju komunikacji tylko ci, którzy mówią w oparciu o ten protokół http, mogą z powodzeniem rozmawiać ze sobą.
gniazdo to tylko punkt końcowy. może podążać za protokołem http, wchodząc w komunikację w www jako klient żądający strony lub może działać jako serwer nasłuchujący połączeń. a może mógłby przestrzegać innego zestawu reguł lub protokołów, takich jak ssh, ftp i komunikować się na inne sposoby.
teraz w programowaniu gniazd możesz stworzyć gniazdo, powiązać je z adresem IP i numerem portu, aby działało jako numer portu i powiedzieć mu, aby podążał za http, ssh, ftp lub cokolwiek chcesz, w oparciu o komunikację, której chcesz używać gniazdo dla.