Jaka jest różnica między programowaniem gniazd a programowaniem Http? Czy ktoś może pomóc?Różnica między programowaniem gniazd a programowaniem Http
Odpowiedz
HTTP jest protokołem aplikacji. Zasadniczo oznacza to, że samego HTTP nie można użyć do transportu informacji do/z odległego punktu końcowego. Zamiast tego opiera się na podstawowym protokole, który w przypadku HTTP to TCP.
Możesz przeczytać więcej o OSI layers jeśli jesteś zainteresowany.
Gniazda to z kolei interfejs API, z którym większość systemów operacyjnych umożliwia komunikację z siecią. Interfejs API gniazda obsługuje różne protokoły z warstwy transportowej i nieruchome.
Oznacza to, że jeśli chcesz używać protokołu TCP, używaj gniazd. Ale możesz także używać gniazd do komunikacji przy użyciu protokołu HTTP, ale musisz zdekodować/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 programistycznych (takich jak .NET), na przykład klasach WebClient
lub HttpWebRequest
.
Używając HTTP, korzystasz z wysokopoziomowego protokołu HTTP (działającego na górze gniazda). Jest to sesja mniej co oznacza wysłaniu żądania tekstową jak GET google.com
i odbierać tekst lub dane binarne w zamian, po czym połączenie zostanie zamknięte (HTTP 1.1 trwałych połączeń są dostępne)
MSDN przykład:
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();
}
Z gniazda idziesz 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});
programowania HTTP, żądanie HTTP jest wykorzystywane do luźno sprzęgania i technologii język platformy obojętny łączności, w którym, jak gniazda programowania jest stosowany, gdy system posiada język protokół specyfikacji
Co masz na myśli przez język? Aplikacja java może na przykład komunikować się z aplikacją Python za pośrednictwem gniazd –
połączenie HTTP
- Połączenie HTTP to protokół działający na gnieździe.
- Połączenie HTTP to abstrakcja wyższego poziomu połączenia sieciowego.
- Przy połączeniu HTTP implementacja zajmuje się wszystkimi szczegółami wyższego poziomu i po prostu wysyła żądanie HTTP (niektóre informacje nagłówka ) i odbiera odpowiedź HTTP z serwera.
Połączenie Gniazdo
- Gniazdo służy do przenoszenia danych pomiędzy systemami. Po prostu łączy dwa systemy razem, adres IP jest adresem urządzenia w sieci opartej na protokole IP.
- Za pomocą połączenia z gniazdem można zaprojektować własny protokół połączenia sieciowego między dwoma systemami.
- W przypadku połączenia z gniazdem należy zadbać o wszystkie szczegóły niższego poziomu połączenia TCP/IP.
Tak więc oba używają TCP, to tylko, że HTTP odpowiada w predefiniowanym formacie, a gniazdo podaje dane jako zwrócone z innego końca gniazda, prawda? –
tak. TCP zapewnia, że wszystko nadejdzie (warstwa transportowa), a HTTP powie, co powinny zrobić aplikacje internetowe. – jgauffin