soket programlama ve Http programlama arasındaki fark


Yanıtlar:


109

HTTP bir uygulama protokolüdür. Temel olarak, HTTP'nin kendisinin uzaktaki bir uç noktaya / buradan bilgi taşımak için kullanılamayacağı anlamına gelir. Bunun yerine, HTTP durumunda TCP olan temel bir protokole dayanır.

görüntü açıklamasını buraya girin

Eğer ilgileniyorsanız OSI katmanları hakkında daha fazla bilgi edinebilirsiniz .

Öte yandan soketler, çoğu işletim sisteminin ağ ile konuşabilmek için sağladığı bir API'dir. Soket API, taşıma katmanından aşağıya farklı protokolleri destekler.

Bu, TCP kullanmak istiyorsanız soketleri kullandığınız anlamına gelir. Ancak HTTP kullanarak iletişim kurmak için soketleri de kullanabilirsiniz, ancak daha sonra mesajların kodunu HTTP spesifikasyonuna ( RFC2616 ) göre çözmeniz / kodlamanız gerekir . Bu, çoğu geliştirici için büyük bir görev olabileceğinden, geliştirici çerçevelerimizde (.NET gibi), örneğin WebClientveya HttpWebRequestsınıflarında da hazır istemcilerimiz var .


2
Yani ikisi de TCP kullanıyor, bu sadece HTTP'nin önceden tanımlanmış bir biçimde yanıt vermesi ve soket, bir soketin başka bir ucundan döndürülen verileri vermesidir, değil mi?
आनंद

4
Evet. TCP, her şeyin ulaştığından (taşıma katmanı) emin olur ve HTTP, web uygulamalarının ne yapması gerektiğini söyler.
jgauffin

25

HTTP ile yüksek seviyeli HTTP protokolü kullanırsınız (bir soketin üzerinde çalışan). Oturumsuzdur GET google.com, bu, bağlantı kapatıldıktan sonra karşılığında metin veya ikili veri gibi metin isteği gönderdiğiniz ve aldığınız anlamına gelir (HTTP 1.1'de kalıcı bağlantılar mevcuttur)

MSDN örneği:

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

Soketlerle daha düşük seviyeye gidersiniz ve aslında bağlantıyı kontrol eder ve ham baytlar gönderir / alırsınız.

Misal:

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

Bağlantı, HTTP 1.1'den kapatılmadı.
Marquis of Lorne

@EJP: Connectionbaşlığın nasıl ayarlandığına bağlıdır ;)
jgauffin

@jgauffin Kesinlikle. Willy-nilly kapalı değil.
Marquis of Lorne

Doğru, ancak OP'nin bu konudaki diğer% 95 bilgilerle birlikte keşfedeceği ayrıntılar bu.
Anri

13

HTTP Bağlantısı

  • HTTP bağlantısı, bir soket üzerinde çalışan bir protokoldür.
  • HTTP bağlantısı, bir ağ bağlantısının daha üst düzey bir soyutlamasıdır.
  • HTTP bağlantısıyla, uygulama tüm bu üst düzey ayrıntılarla ilgilenir ve yalnızca HTTP isteği (bazı başlık bilgileri) gönderir ve sunucudan HTTP yanıtı alır.

Soket Bağlantısı

  • Soket, sistemler arasında veri taşımak için kullanılır. Basitçe iki sistemi birbirine bağlar, bir IP adresi, IP tabanlı bir ağ üzerinden makinenin adresidir.
  • Soket bağlantısı ile iki sistem arasında ağ bağlantısı için kendi protokolünüzü tasarlayabilirsiniz.
  • Soket bağlantısıyla, bir TCP / IP bağlantısının tüm alt düzey ayrıntılarıyla ilgilenmeniz gerekir.

1

HTTP programlama veya HTTP isteği, gevşek bağlantı ve platformdan bağımsız dil teknolojisi iletişimi için kullanılır; burada soket programlama, sistemin dil belirtim protokolüne sahip olduğu yerlerde kullanılır.


1
Dil ile ne demek istiyorsun? Bir java uygulaması, örneğin soketler aracılığıyla bir Python uygulamasıyla iletişim kurabilir
Adam Hughes,

Sanırım onun kastettiği, genellikle gevşek bir şekilde bağlı (veya tamamen farklı) sistemleri bağlamak istiyorsanız, HTTP yararlıdır: başka bir teknolojiyle desteklenen bir yapıya sahip bazı teknolojilerle oluşturulmuş bir ön uç, web'deki kaynaklara URL'ler aracılığıyla erişir. Oysa genellikle, TCP / UDP gibi daha düşük seviyeli bağlantı protokolleri kullanıyorsanız, muhtemelen benzer teknolojilere sahip sistemlerle (örneğin, farklı Java uygulamaları) bir iletişim yönetiyorsunuzdur. Bu doğru mu? Kendim anlamaya çalışıyorum.
Nicola Amadio

0

iki uç noktanın birbiriyle konuşabilmesi için her ikisinin de bir dizi kurala uyması gerekir. bilgisayarda bu kurallara protokol adı verilir.

örneğin, tarayıcı gibi bir uç nokta ve bir başka web sunucusu gibi bir uç nokta için, iletişim kurabilmek ve bilgi alıp satabilmek için her ikisi de http adı verilen bir dizi kuralı veya protokolü izlemelidir. bu yüzden dünya çapındaki ağda ve bu tür iletişimlerde yalnızca bu http protokolüne dayalı olarak konuşan kişiler birbirleriyle başarılı bir şekilde konuşabilir.

soket sadece bir uç noktadır. bir sayfa isteyen bir istemci olarak www'da bir iletişime girmek için http protokolünü takip edebilir veya bağlantıları dinleyen bir sunucu olarak hareket edebilir. veya belki ssh, ftp gibi başka bir dizi kuralı veya protokolü izleyebilir ve başka yollarla iletişim kurabilir.

şimdi soket programlamada bir soket yapabilir, onu bir ip adresine ve bir port numarasına bağlayarak port numarası olarak hareket edebilir ve kullanmak istediğiniz iletişimlere göre http, ssh, ftp veya istediğiniz her şeyi takip etmesini söyleyebilirsiniz. soket için.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.